Algorithm/알고리즘 문제
[백준/BOJ][Python] 2751번 수 정렬하기 2
은 딩
2022. 7. 7. 20:45
https://www.acmicpc.net/problem/2751
2751번: 수 정렬하기 2
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제 입력 1 복사
5
5
4
3
2
1
예제 출력 1 복사
1
2
3
4
5
아이디어
문제 자체는 쉬운데 파이썬으로 풀면서 시간초과가 났다. 반복문으로 여러 개를 입력 받을 때 input()을 쓰면 시간초과가 나올 수 있다. 이를 방지하기 위해서는 input() 대신에 import sys를 한 상태로 sys.stdin.readline()을 써주는 것이 좋다.
시간 초과를 검색해보다가 또 알게 된 것은 문자열 n줄을 입력받아 리스트에 저장할 때이다. ( 참고로 sys.stdin.readline()은 한 줄 단위로 입력받기 때문에, 개행문자가 같이 입력받아진다. ex) 100을 입력했다면 100\n이 입력, 형변환 해주면 괜찮다. )
# 문자열 n줄을 입력받아 리스트에 저장할 때
# 원래 내 방식
n = int(input())
data = []
for _ in range(n):
data.append(input())
# 새롭게 배운 방식
import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)]
또 새로 알게 된 것은 리스트에 있는 원소만(리스트 형식 [ ] 없이) 출력하고 싶을 때이다.
import sys
n = int(sys.stdin.readline())
data = [sys.stdin.readline().strip() for i in range(n)] # 1 2 3 4 5를 입력했을 때
print(*data, sep=' ') # output : 1 2 3 4 5
print(*data, sep='') # output : 12345
print(*data, sep='\n')
# output : 1
# 2
# 3
# 4
# 5
정답 코드
import sys
n = int(input())
list_a = []
for i in range(n):
list_a.append(int(sys.stdin.readline()))
list_a.sort()
print(*list_a, sep='\n')