1 분 소요


단계 제목 설명  
4 1차원 배열 1차원 배열  
  소단계 문제번호 제목
  2 10871 X보다 작은 수
    배열을 입력받고 v를 찾는 문제  

문제

정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)

둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

출력

X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.

내 제출

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

L = len(a_list)
result = []

for i in range(L):
    if a_list[i] < X:
        result[i] = a_list[i]

print(result)

결과

오답.런타임 에러 (IndexError)

수정 제출

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=" ")

결과

정답

오답 이유

먼저

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

L = len(a_list)
result = []

for i in range(L):
    if a_list[i] < X:

여기까지는 잘 맞았습니다.

하지만 다음에 배열의 성분을 인덱싱해주는 과정에서 문제가 생깁니다.

i 번째 성분마다 인덱싱을 해주므로 조건에 부합하지 않는 부분에는 인덱싱이 되지 않아 공란이 생기게 되고 이로인해 오류가 발생합니다.

따라서 print() 에 뒤에 end = “ “ 을 붙여주어 띄어쓰기 효과를 적용해 해결합니다.

사용된 코드 이론


파이썬의 출력문은 print를 사용하며 두 개의 옵션을 사용할 수 있습니다.

- sep=” “

 이 옵션을 이용하게 되면 print문의 출력문들 사이에 해당하는 내용을 넣을 수 있습니다. 기본 값으로는 공백이 들어가 있으며 이를 사용해 원하는 문자를 입력할 수 있습니다.

- end=” “

 이 옵션의 경우 print 문을 이용해 출력을 완료한 뒤의 내용을 수정할 수 있습니다. 기본 값으로는 개행(\n)이 들어가 있으며 이를 사용해 개행을 없애거나 원하는 문자를 입력할 수 있습니다.

우선 기존의 print( ) 만 사용하여 출력을 할 경우입니다.

print("1-1칸","1-2칸","1-3칸")
print("2-1칸","2-2칸","2-3칸")

실행결과

앞서 말한 것과 같이 print안에 여러 개의 값을 출력할 경우 값들 사이에 공백이 들어가 있으며,

print문이 끝나게 될 경우 개행(\n)이 되는 것을 확인할 수 있습니다.

이제 띄어쓰기가 되는 것과 개행을 안되게 하기 위해 sep와 end를 사용해 보겠습니다.

print("1-1칸","1-2칸","1-3칸",end = "")
print("2-1칸","2-2칸","2-3칸",sep = "")

실행결과

end = “”, sep = ““ 안에 다른 값을 넣게 되면 해당하는 값이 들어가게 됩니다.

print("1-1칸","1-2칸","1-3칸",end = "**end 입니다** \n")
print("2-1칸","2-2칸","2-3칸",sep = "**sep입니다**")

실행결과



참고문헌

기루