1차원 배열-2단계_ X보다 작은 수
단계 | 제목 | 설명 | |
---|---|---|---|
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입니다**")
실행결과