barcode

백준 2750번 풀이

BOJ/[BOJ] Python

문제

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

 

2750번: 수 정렬하기

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

www.acmicpc.net

주어진 수를 오름차순으로 정렬하기(2751번도 같은 문제인데 버블/선택/삽입으로는 시간초과 뜬다)

 

풀이

정렬 알고리즘과 관련된 이론적인 설명은 아래를 참고할 것.

 

https://koreanraichu.sfuhost.com/2022/6650/

 

정렬 알고리즘 – 인생 그것은 귀차니즘의 연속

알고리즘이 문제를 푸는 방법이라고 했는데, 그러면 정렬 알고리즘은 뭘 정렬하기 위한 방법이겠지? 네, 맞습니다. 이것도 여러가지가 있는데 대표적인 것 다섯가지만 일단 알아보자. 코드와 알

koreanraichu.sfuhost.com

위 글에서 다섯가지 대표적인 정렬 알고리즘을 봤는데, 문제가 하나 있었다. ‘버블 알고리즘은 배열의 길이가 커질수록 시간복잡도가 무지막지하게 증가한다’는 것. 근데 시간제한이 1초여… 그래서 선택 알고리즘으로 했다. 

import sys
N = int(sys.stdin.readline())
array = []

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

입력은 들어오는 만큼 받아서 리스트에 넣으면 된다.

import sys
N = int(sys.stdin.readline())
array_in = []

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

def selection_sort(array):
	n = len(array)
	for i in range(n):
		min_index = i
		for j in range(i + 1, n):
			if array[j] < array[min_index]:
				min_index = j
		array[i], array[min_index] =  array[min_index], array[i]
	return array

array_out = selection_sort(array_in)

for i in array_out:
    print(i)

선택 정렬을 함수로 정의하고 돌려서 출력을 하면 되는’데’… 출력이 한줄에 하나씩 나와야 하잖음? 그래서 배열을 통으로 출력하면 안되고 for문으로 출력해야 한다.

2751번도 같은 문제인데, 버블/선택/삽입 정렬로 하면 시간초과 뜬다. 병합이나 퀵을 쓰자.

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 25305번 풀이  (0) 2022.08.23
백준 10989번 풀이  (0) 2022.08.20
백준 1436번 풀이  (0) 2022.08.20
백준 1018번 풀이  (0) 2022.08.20
백준 25304번 풀이  (0) 2022.08.20