새로운 방법으로 시작한 알고리즘 공부!!!
백준으로 알고리즘 공부를 시작하셨다는 유튜브 영상을 보고 나도 똑같이 해보기로 했다.
(해당 영상) https://www.youtube.com/watch?v=H6z1_tnyhp0&t=518s
아직 단계별 풀이에서 제일 쉽다는 브루트 포스 알고리즘까지만 풀었기 때문에... 당분간은 정렬을 풀며 알고리즘 공부 예열 !!!!!!!
# 입력이 주어졌을 때 오름차순으로 정렬하는 프로그램
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)
삽입 정렬은 말그래도 <비교 후 삽입>의 과정이 반복되는 정렬이다. 두 원소를 비교하고 작은 숫자를 앞으로 보내고, 그 후 다음을 비교한 후, 순서에 맞게 삽입을 하는...! 그런 정렬이다.