본문 바로가기

알고리즘 예시/백준

[Baekjoon] 백준 #10871번 파이썬 해답

320x100

10891번

 

백준의 단계별 풀어보기 중 1차원 배열에 들어있는 문제입니다.
배열에 대한 사전지식이 없으면 '어?' 할 수 있는 알고리즘입니다.

 

1차원 배열에 대해서 기초적인 지식을 확인하는 부분입니다.

 

필자의 게시글 중 파이썬의 응용단계, numpy편에서 이에 대해 다룬적이 있습니다.

https://astart.tistory.com/20

 

파이썬_응용단계 ep.2 Numpy 튜토리얼

서론 추후 Pandas를 원활하게 쓰기 위해, numpy는 중간단계로서 거쳐갑니다. 왜 numpy가 필요하다고 했죠? 강력한 행렬 조작, 연산을 시작할 수 있기 때문에 필요하다고 했습니다. 즉, 목적지가 아닙

astart.tistory.com

 

1차원 배열은 쉽게 말해 같은 자료형으로 연속된 메모리공간을 할당하여 사용하는 것입니다.

배열안에서 특정한 값만 꺼내쓰는 인덱싱이나, 앞에서 뒤까지 원하는 부분을 잘라서 쓰는 슬라이싱

이란 기능도 있었죠?

 

다시 문제를 확인해보겠습니다.

 

문제 읽기

 

 

정답

 

N,X = map(int, input().split())
A = list(map(int, input().split()))

for i in range(N):
    if A[i] < X:
       print(A[i], end=' ')

 

입력 예시는


5 5

1 2 3 4 5 


입니다.

 

  • 풀이과정은?

 

언뜻 보고 리스트 인덱싱을 하면 되지 않을까?

하고 생각하는 순간! 성공입니다.

 

단순히 리스트 A에서 이미 입력받은 X의 인수보다 작은 값을

꺼내면 성공인 문제입니다.

 

문제에서 요구한 N과 X를 받아줍니다.

 

N,X = map(int, input().split())
A = list(map(int, input().split()))

 

N을 배열의 갯수(리스트 안의 값이 몇개인지 셈)으로 사용하고

X를 A리스트 안의 수와 비교할 인수로 사용할 것입니다.

 

print(A[i])

 

당연히 A의 리스트 중 하나를 뽑는 것이기 때문에 A[i]를 넣어서 뽑아줘야 합니다.

이때의 i는 정수 1, 2, 3, 4, ··· N 에서 순서대로 올라가야 합니다.

 

반복해서 올라가는 수, for문을 써줘야겠죠?

 

for i in range(N):

 

for i in range(N):
    print(A[i])

 

헌데 여기서, 리스트 A안의 어떤 수가 X보다 작아야 합니다.

 

for i in range(N):
    if A[i] < X:
       print(A[i])

 

이렇게 해서 다됬다고 생각하면 낭패입니다.

그대로 이 함수를 실행하면 다음과 같이, 한번 반복문이 돌았기 때문에 한줄씩 띄어서

줄 단위로 출력하게 됩니다.

 

5 5
1 2 3 4 5
1
2
3
4

 

끝나는 단위를 "줄 바꿈"이 아닌 "띄어쓰기"로 설정하기 위해서

end = " '로 바꿔주어야 합니다.

 

for i in range(N):
    if A[i] < X:
       print(A[i], end=' ')

 

처음에 입력받는 인수를 합쳐줍시다.

 

N,X = map(int, input().split())
A = list(map(int, input().split()))

for i in range(N):
    if A[i] < X:
       print(A[i], end=' ')

 

 

알고리즘 완성.

728x90