반응형
# Problem
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. |
# My Answer - 파이썬 기본 정렬 라이브러리로 문제 해결하기
n = int(input())
result=[]
for _ in range(n):
result.append(int(input()))
result.sort()
for num in result:
print(num)
# Solution 1 - 선택 정렬 알고리즘으로 문제 해결하기
n = int(input())
array = list()
for _ in range(n):
array.append(int(input()))
for i in range(n):
min_index = i # 가장 작은 원소의 인덱스
for j in range(i + 1, n):
if array[min_index] > array[j]:
min_index = j
array[i], array[min_index] = array[min_index], array[i] # 스와프
for i in array:
print(i)
# Solution 2 - 병합정렬 알고리즘
시간복잡도 O(NlogN)
def merge_sort(array):
if len(array) <= 1:
return array
mid = len(array) //2
left = merge_sort(array[:mid])
right = merge_sort(array[mid:])
i, j, k = 0, 0, 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
array[k] = left[i]
i += 1
else:
array[k] = right[j]
j += 1
k += 1
if i == len(left):
while j < len(right):
array[k] = right[j]
j += 1
k += 1
elif j == len(right):
while i < len(left):
array[k] = left[i]
i += 1
k += 1
return array
n = int(input())
array = []
for _ in range(n):
array.append(int(input()))
array = merge_sort(array)
for data in array:
print(data)
# 선택 정렬 알고리즘
주어진 데이터 중 최소값을 찾아 맨앞에 위치한 값과 교체
맨앞 데이터 빼고 반복
# 병합 정렬 알고리즘 참고
재귀 용법을 사용한 정렬 알고리즘
리스트를 반으로 잘라 나눈 후 재귀적으로 병합 정렬
부분 리스트를 다시 하나의 정렬된 리스트로 합병
반응형
'Algorithm > 백준 알고리즘 풀이' 카테고리의 다른 글
[Baekjoon] 10814. 나이순 정렬 (0) | 2021.04.19 |
---|---|
[Baekjoon] 1427. 소트인사이드 (0) | 2021.04.19 |
❗️[Baekjoon] 4195. 친구 네트워크 (0) | 2021.04.15 |
[Baekjoon] 1920. 수 찾기 (0) | 2021.04.15 |
[Baekjoon] 10930. SHA-256 ( hashlib ) (0) | 2021.04.15 |