[BOJ] 2750: 수 정렬하기 1

이슬비·2022년 3월 4일
0

Algorithm

목록 보기
4/110

새로운 방법으로 시작한 알고리즘 공부!!!
백준으로 알고리즘 공부를 시작하셨다는 유튜브 영상을 보고 나도 똑같이 해보기로 했다.
(해당 영상) https://www.youtube.com/watch?v=H6z1_tnyhp0&t=518s


아직 단계별 풀이에서 제일 쉽다는 브루트 포스 알고리즘까지만 풀었기 때문에... 당분간은 정렬을 풀며 알고리즘 공부 예열 !!!!!!!


2750: 수 정렬하기 1

내 풀이

# 입력이 주어졌을 때 오름차순으로 정렬하는 프로그램

Num = int(input()) # 수의 개수

num_list = [int(input()) for _ in range(Num)] # 숫자 입력
num_list.sort()

for i in range(Num):
    print(num_list[i])

처음에는

num_list.sort()

이 부분을

ordered_list = num_list.sort()

로 작성했다. 당연히 틀릴 수 밖에!

  • object.sort(): 객체 자체를 변환
  • sorted(object): 새로운 객체를 반환

라는 사실을 완전히 잊은 것이다. 파이썬으로 내내 딥러닝만 공부했더니 이런 기본적인 부분을 고대로 잊어버렸다... 여튼 이렇게 이 부분을 다시 깨닫고 완성!

다른 풀이

다른 분의 풀이는 아래의 블로그를 참고하였다.
(https://0ver-grow.tistory.com/412)

정렬도 알고리즘이 있다고 하는데, 알고리즘을 정말 처음 공부하는 나에겐 이마저도 새로웠다. 음 정확히는 새롭다고 생각했다. 예전에 c 공부할 때 버블... 삽입... 이라는 말을 들었었다. 즉... 알고리즘을 접해본 적이 있다는 것 (?) 그래서 버블 정렬과 삽입 정렬을 이용한 풀이를 소개해보겠다!

버블 정렬

N = int(input())
M = []
for i in rnage(N):
M.append(int(input()))

#Bubble sort
for i in range(len(M)):
	for j in range(len(M)):
    	if M[i] < M[j]:
        	M[i], M[j] = M[j], M[i]

for n in M:
	print(n)

두 원소를 비교하는 방법을 계속해서 반복하는 것이다. 두 원소를 비교해야하므로 중첩 반복문을 사용하였고, if문을 사용해 비교하였다.

삽입 정렬

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

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

# Insert Sort
for i in range(1, len(M)) :
    while (i>0) & (M[i] < M[i-1]) :
        M[i], M[i-1] = M[i-1], M[i]
        
        i -= 1
        
for n in M : 
    print(n)

삽입 정렬은 말그래도 <비교 후 삽입>의 과정이 반복되는 정렬이다. 두 원소를 비교하고 작은 숫자를 앞으로 보내고, 그 후 다음을 비교한 후, 순서에 맞게 삽입을 하는...! 그런 정렬이다.

profile
정말 알아?

0개의 댓글