파이썬 알고리즘 문제 풀이

BaekJoon Online Judge 2751번 파이썬

gogi masidda 2022. 5. 2. 16:50

문제 링크
https://www.acmicpc.net/problem/2751

 

2751번: 수 정렬하기 2

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net


처음에 잘못 짠 코드

import sys

N = int(sys.stdin.readline())
numbers = [0] * N

for i in range(0,N):
  numbers[i] = int(sys.stdin.readline())

for i in range(0,N):
  for j in range(i,N):
    if numbers[i] >= numbers[j]:
      dummy = numbers[i]
      numbers[i] = numbers[j]
      numbers[j] = dummy
for i in range(0,N):
  print(numbers[i])

(input을 사용하는 것보다 sys.stdin.readline()을 사용하는 것이 속도가 빠르기 때문에 input을 사용하지 않았다.)
처음엔 버블정렬 방식으로 오름차순 정렬을 하려했다.
하지만 이 문제에서는 1 <= N <= 1000000 으로 N의 범위가 굉장히 크기 때문에 시간 초과가 떴다.
그래서 내장되어 있는 sort() 함수로 오름차순 정렬을 시행하였다.

정답 코드

import sys

N = int(sys.stdin.readline())
numbers = [0] * N

for i in range(0,N):
  numbers[i] =  int(sys.stdin.readline())

numbers.sort()

for i in range(0,N):
  print(numbers[i])

 

728x90