[Python Algorithm] 백준알고리즘 10871번 파이썬 풀이

2019. 6. 24. 03:34Python/ㄴ Algorithm

Problem


Introduction


해당 문제에서 요구하는 바는 첫째 줄에 N과 X가 주어지며, 둘째 줄에 수열 A를 이루는 정수 N개가 주어지는데 여기서 X보다 작은 수를 순서대로 공백으로 구분하여 출력하는것이다.

Solve


a, b = input().split()
a = int(a); b = int(b)
res = ""
c = input().split()
c = list(c)
for i in range(a):
    if int(c[i]) < b:
        res += c[i]+" "
res = res[:-1]
print(res)

완성된 코드는 위와 같다.

a, b = input().split()
a = int(a); b = int(b)

우선 해당 코드를 통해 각 a, b변수에 input함수로 값을 입력받고 split함수를 이용해 공백을 기준으로 문자열을 잘라 저장한 뒤, a변수와 b변수의 자료형을 문자형 자료형에서 정수형 자료형으로 형변환을 해준 뒤 다시 저장한다. a와 b변수에는 초기 N과 X의 값이 저장된다.

res = ""

그리고 결과값을 담을 res변수를 초기화해준다. 위의 과정이 끝났다면 이제 수열 A를 이루는 정수 N개를 두번째 라인에서 입력받아야한다. 아래 코드를 살펴보자.

c = input().split()
c = list(c)

우선 수열 A를 입력받은 뒤 입력에서 공백을 구분처리하여 c변수에 저장한 뒤 c변수를 list함수를 사용하여 문자형 자료형에서 리스트형 자료형으로 형변환해준다.

for i in range(a):
    if int(c[i]) < b:
        res += c[i]+" "
res = res[:-1]
print(res)

이전의 과정이 끝나면 위 코드 즉, for문을 사용하여 입력받은 정보를 토대로 처리하여 출력해주어야한다. a변수의 값만큼 for문을 실행(반복)한다. 즉 a의 값이 10일 경우 i의 값은 시작값이 0. 매 반복마다 1씩 증가하여 9까지 증가하게된다. 만약 c[i]의 값이 b보다 작을 경우 문제에서 요구한 조건에 성립함으로 res변수에 해당 숫자 + " "(공백)을 추가하여 저장한다.(문제에서 데이터의 구분은 공백으로 하라고하였기때문이다.) for문이 정상적으로 종료되고나면 res변수에 저장되어있는 문자열의 가장 오른쪽부터 1자리를 삭제하게되는데 이는 위의 과정에서 맨 마지막 데이터에 공백이 붙기때문에 이를 제거해주기 위함이다. 모든 데이터의 처리과정이 종료됨과 동시에 res변수에 저장되어있는 값을 출력하고 프로그램은 종료된다.

Result


input값이 10, 5, [1, 10, 4, 9, 2, 3, 8, 5, 7, 6]일 경우 실행결과는 아래와 같다.

<input>
10 5
1 10 4 9 2 3 8 5 7 6

<output>
1 4 2 3