이번 포스팅은 https://www.acmicpc.net/problem/2751에서 푼 것을 토대로 작성했습니다.
| 문제
수 정렬하기 2
문제
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
문제 해석
- 한 줄씩 입력
- 오름차순 정렬 후 한 줄씩 출력
| 풀이 1 - 시간 초과
python 코드)
n = int(input())
lst = []
for i in range(n) :
num_list = int(input())
lst.append(num_list)
lst.sort()
for i in range(len(lst)) :
print(lst[i])
출력 및 결과)
)
- 수의 개수 N이 1,000,000개까지 입력이 들어와 input()으로 처리하면 시간 초과가 되는 것을 확인할 수 있었습니다.
input()을 쓰지 않고 시간 초과가 되지 않는 다른 방법을 찾다 sys.stdin.readline()라는 다르게 입력받는 방법을 찾아서 적용했으며 input()과 차이점을 확인했습니다.
| sys.stdin.readline()
- 앞서 input()으로 백만 개의 입력을 처리하니 시간 초과로 문제가 풀리지 않았습니다. 이 문제를 풀기 위해서는 파이썬 표준 라이브러리인 sys의 sys.stdin.readline()을 사용하여 입력을 빠르게 처리해서 풀어야 하는 것을 확인했습니다.
- sys.stdin.readline()은 input()과 마찬가지로 str 타입의 형태로 받아지며 형 변환에 유의해야 합니다.
- 또한 str 형으로 입력받으면 개행 문자가 포함됩니다. ( input()의 경우 개행 문자를 삭제 후 리턴 )
| sys.stdin.readline()을 이용한 문제 풀이
import sys
n = int(input())
lst = []
for i in range(n) :
lst.append(int(sys.stdin.readline()))
lst.sort()
for i in range(len(lst)) :
print(lst[i])
이상으로 백준 2751번 문제를 풀어봤습니다.
알고리즘 문제를 하루에 조금씩 다시 풀기 시작했는데
안 풀리는 것이 있으면 포스팅하며 회고하려고 합니다.
다음 포스팅으로 찾아오겠습니다.
감사합니다 :)
'Python > 백준 알고리즘' 카테고리의 다른 글
[BaekJoon/Python] : 백준 2292번 - 벌집 (0) | 2021.02.04 |
---|---|
[BaekJoon/Python] : 백준 1712번 - 손익분기점 (0) | 2021.02.03 |
[BaekJoon/Python] : 백준 1316번 - 그룹 단어 체커 (0) | 2021.02.02 |
[BaekJoon/Python] : 백준 2941번 - 크로아티아 알파벳 (0) | 2021.01.12 |
[BaekJoon/Python] : 백준 5622번 - 다이얼 (0) | 2021.01.12 |