728x90
📌 문제
10871번: X보다 작은 수
첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.
www.acmicpc.net

📌 내 코드
# 10871 X보다 작은 수
import sys
input = sys.stdin.readline
n, x = map(int, input().split())
a = list(map(int, input().split()))
ans = []
for i in range(n):
if x > a[i]:
ans.append(a[i])
print(ans)
💡 풀이
- 숫자 갯수 n과 정수 x를 입력 받는다.
- n개의 숫자를 a라는 이름의 리스트 형태로 입력 받는다.
- x보다 작은 수를 담을 빈 리스트 ans (answer를 의미)를 만든다.
- for문을 n회 반복한다.
- 만약 입력받은 정수 x가 리스트 a의 인덱스 i에 담겨 있는 값과 비교해서 더 크면
- 해당 인덱스 i에 담긴 값을 빈 리스트 ans에 담는다.
- for문 반복이 멈추면 리스트에 담긴 값들을 전부 출력한다.
위의 과정으로 로직을 구성해 코드를 짜고 제출했는데 틀렸다고 나왔다. 예제 출력 시 값 자체는 정상적으로 나왔는데 왜 그런건가 싶었는데 내 코드의 경우 리스트 자체를 출력하는 것이기 때문에 콤마( , )와 리스트의 대괄호( [] )까지 다 포함해서 출력됐다.
그래서 예제출력과 일치하는 결과를 내기 위해서는 리스트 형태가 아닌 if문을 통해 리스트 a에서 x보다 작은 수가 담긴 인덱스 i가 발견되면 그 수 하나를 출력하도록 해야 했다.
📌 수정 후 코드
# 10871 X보다 작은 수
import sys
input = sys.stdin.readline
n, x = map(int, input().split())
a = list(map(int, input().split()))
for i in range(n):
if x > a[i]:
print(a[i], end=" ")

위의 풀이에서 출력을 리스트 형태로 하는 게 아닌 리스트 a의 인덱스 i에 위치한 값을 출력하도록 해서 맞출 수 있었다.
📌 정리
입력받는 정수 갯수에 맞춰 입력 받아야 하는 수들이 있을 경우 무조건 리스트 형태로 입력받고, 출력 값이 리스트 안에 있는 값들 중 일부를 반환하는 경우에도 리스트 형태로 출력해줘야 한다고 생각해서 일어난 실수였다.
앞으로는 문제만큼 예제 입출력의 형태도 확인하는 습관을 들이도록 해야겠다.
적극적인 피드백은 언제나 환영입니다:)