문제 요약
N개의 정수가 주어질 때, 오름차순으로 정렬해서 한 줄에 하나씩 출력한다.
(N ≤ 1,000, 각 수는 중복 없음)
내가 작성한 코드 (정답)
sys.stdin.readline으로 입력을 받고, print(*numbers, sep='\n')로 출력 포맷을 깔끔하게 처리한 점이 좋다.
import sys
input = sys.stdin.readline
n = int(input())
numbers = []
for _ in range(n):
number = int(input())
numbers.append(number)
numbers.sort()
print(*numbers, sep='\n', end='')
개선할 수 있는 점
1) 리스트 입력은 컴프리헨션으로 더 간단하게
반복문 + append 대신 아래처럼 한 줄로 만들 수 있다.
numbers = [int(input()) for _ in range(n)]
2) 출력은 join + sys.stdout.write 패턴이 자주 쓰인다
print(*..., sep='\n')도 충분히 좋지만, 코테에서는 아래처럼 문자열을 한 번에 만들어 출력하는 패턴을 많이 쓴다.
- 불필요한
end=''처리 고민이 줄어듦 - 출력량이 많을 때도 안정적으로 빠름
최종 코드 (추천 1): 컴프리헨션 + join
import sys
input = sys.stdin.readline
n = int(input())
numbers = sorted(int(input()) for _ in range(n))
sys.stdout.write('\n'.join(map(str, numbers)))
이 코드에서 배울 수 있는 점
sorted(...)를 쓰면 “정렬된 새 리스트”를 바로 만들 수 있다.map(str, numbers)로 정수 리스트를 문자열로 바꾼 뒤\n.join(…)으로 한 번에 출력한다.sys.stdout.write는 마지막 개행 처리까지 직접 컨트롤할 수 있다.
최종 코드 (추천 2): sys.stdin.read로 더 간단하게 (대안)
입력을 통째로 읽어서 처리하는 스타일도 많이 쓴다.
import sys
data = sys.stdin.read().split()
n = int(data[0])
numbers = sorted(map(int, data[1:1+n]))
sys.stdout.write('\n'.join(map(str, numbers)))
이 코드에서 배울 수 있는 점
sys.stdin.read()는 입력 전체를 한 번에 가져온다.split()후 숫자만 뽑아map(int, ...)으로 변환하면 루프가 줄어든다.- 입력량이 큰 문제에서 특히 유용한 패턴이다.
이번 문제로 배운 점 정리
- 코딩테스트에서
sys.stdin.readline으로 입력을 받으면 입력 처리 패턴을 통일할 수 있다. - 출력은
print(*arr, sep='\n')로 포맷을 깔끔하게 만들 수 있고, 더 나아가sys.stdout.write('\n'.join(...))로 한 번에 출력하는 방식도 자주 쓰인다. - 정렬은
list.sort()(제자리 정렬) 또는sorted()(새 리스트 반환) 중 상황에 맞게 선택하면 된다.