Python/백준 알고리즘

[BaekJoon/Python] : 백준 2751번 - 수 정렬하기 2

우준세 2022. 10. 18. 22:56
728x90
반응형

 

이번 포스팅은 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번 문제를 풀어봤습니다.

알고리즘 문제를 하루에 조금씩 다시 풀기 시작했는데 

안 풀리는 것이 있으면 포스팅하며 회고하려고 합니다.

 

다음 포스팅으로 찾아오겠습니다.

 

감사합니다 :) 

 

 

728x90
반응형