문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/2750
2750번: 수 정렬하기
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
import sys
N=int(sys.stdin.readline())
num_list=[]
for _ in range(N):
num=int(sys.stdin.readline())
num_list.append(num)
for x in range(N):
for y in range(x,0,-1):
if(num_list[y-1]>num_list[y]):
num_list[y-1],num_list[y]=num_list[y],num_list[y-1]
for x in num_list:
print(x)
※ 정렬
● 삽입정렬을 이용하여 풀어보았다.
num_list 배열 두번째 원소부터 끝 원소까지 순회하며 각 원소가 들어갈 위치를 찾아주는 알고리즘이다.
각 단계에서 들어갈 위치를 찾아야 하는 원소의 앞 원소들과 값을 비교하여 알맞은 위치를 찾아준다.
* 배열 [5,4,3,2,1] 을 오름차순 정렬 한다고 가정
-> 먼저 5 앞에는 원소가 없으므로 다음 단계로 패스.
-> 이제 4의 원소의 자리를 찾아주자. 4 앞에는 5라는 원소가 있다. 4보다 앞 원소인 5가 더 크므로 4와 5의 자리를 바꿔준다. [4,5,3,2,1]
-> 이제 3의 자리를 찾아주자. 3 앞에는 4와 5라는 원소가 있다. 먼저 3과 가까운 5와 비교하면 앞 원소인 5가 더 크므로 3과 5의 자리를 바꿔준다. [4,3,5,2,1] 다른 앞 원소 4도 3보다 크므로 3과 4의 자리도 바꿔준다. [3,4,5,2,1]
-> 이제 2의 자리를 찾아주자. 2 앞에는 3,4,5라는 원소가 있다. 모두 2보다 작으므로 2는 비교를 통해 맨 앞자리로 가게 된다. [2,3,4,5,1]
->이제 1의 자리를 찾아주자. 1 앞에는 2,3,4,5라는 원소가 있다. 모두 1보다 작으므로 1은 비교를 통해 맨 앞자리로 가게 된다. [1,2,3,4,5]
♣ 참고: 삽입 정렬
https://ko.wikipedia.org/wiki/%EC%82%BD%EC%9E%85_%EC%A0%95%EB%A0%AC
삽입 정렬 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 삽입 정렬(揷入整列, insertion sort)은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬
ko.wikipedia.org
'백준(baekjoon) > 브론즈' 카테고리의 다른 글
백준(baekjoon) 1934번: 최소공배수(브론즈 1, 파이썬 PYTHON) - 정수론 및 조합론 (0) | 2022.09.07 |
---|---|
백준(baekjoon) 1085번: 직사각형에서 탈출(브론즈 3, 파이썬 PYTHON) - 기하1 (0) | 2022.09.06 |
백준(baekjoon) 2798번: 블랙잭(브론즈 2, 파이썬 PYTHON) - 브루트 포스 (0) | 2022.09.03 |
백준(baekjoon) 10872번: 팩토리얼(브론즈 5, 파이썬 PYTHON) - 재귀 (0) | 2022.09.01 |
백준(baekjoon) 4344번: 평균은 넘겠지(브론즈 1, 파이썬 PYTHON) - 1차원 배열 (0) | 2022.08.30 |