Home [Python] 백준 2751번 : 수 정렬하기 2
Post
Cancel

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

Problem

https://www.acmicpc.net/problem/2751

Solution

오답 코드1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
N = int(input())
numbers = []

for i in range(N) : 
    numbers.append(int(input()))

for i in range(1, len(numbers)) :
    while (i>0) and (numbers[i] < numbers[i-1]) :
        numbers[i], numbers[i-1] = numbers[i-1], numbers[i]
        
        i -= 1
        
for n in numbers : 
    print(n)

오답 코드2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys

def bubbleSort(x):
	length = len(x)-1
	for i in range(length):
		for j in range(length-i):
			if x[j] > x[j+1]:
				x[j], x[j+1] = x[j+1], x[j]
	return x

N = int(input())
numbers = []

for i in range(N) : 
    numbers.append(int(sys.stdin.readline()))

bubbleSort(numbers)
        
for _ in numbers :
    sys.stdout.write(str(_)+'\n')

버블정렬을 사용한 풀이로, input과 print를 각각 stdin.readline, write함수로 바꿔주었는데도 시간초과가 나왔다. 버블정렬의 시간복잡도가 O(N2)으로 비효율적이기 때문에 발생한 것으로 보인다.

정답 코드

1
2
3
4
5
6
7
8
9
10
import sys

n = int(input())
numbers = []

for i in range(n) : 
    numbers.append(int(sys.stdin.readline()))
        
for j in sorted(numbers): 
    sys.stdout.write(str(j)+'\n')

위 코드는 파이썬의 내장함수인 sorted 함수를 사용하였다. 병합정렬 기반으로 만들어진 함수이기 때문에 최악의 경우에도 시간복잡도 O(N logN)를 갖는다. 또한 입출력은 sys를 import해서 사용했다.

Memo

시간제한이 있는 문제의 경우 파이썬 라이브러리를 활용하면 더욱 효율적이고 빠르게 문제를 풀어낼 수 있는 것 같다.

Ref.

파이썬 내장함수
파이썬 sorted 함수

This post is licensed under CC BY 4.0 by the author.

[Python] 백준 2609번 : 최대공약수와 최소공배수

유클리드 호제법(Euclidean algorithm)