🧩 Programming Languages/Python CodingTest

백준 2750번(bronze 2) : 수 정렬하기 (2차)

복숭아아이스티에샷추가 2024. 8. 17. 06:00

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

 

알고리즘 공부는 꾸준히 해야한다는 것을 실감하게 된다.

복습 차 이전에 풀었던 문제를 풀려고 한다.

 

 

백준 2750번(bronze 2) : 수 정렬하기

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

entwicklerin.tistory.com

 

정렬 카테고리에 있는 문제이기 때문에 삽입 정렬 혹은 버블 정렬로 풀이해보는 것이 출제의도였을텐데

과거의 나는 그냥 파이썬의 편리한 sort 함수를 사용하였다. (반성하자...!)

그래서 이번에는 정렬 알고리즘을 활용하여 문제를 풀어보았다.

 


 

1. 삽입 정렬

n = int(input())
nums = [int(input()) for _ in range(n)]

for i in range(1, n):
  while (i>0 and (nums[i] < nums[i-1])):
    nums[i], nums[i-1] = nums[i-1], nums[i]
    i -= 1

[print(num) for num in nums]

 

 

2. 버블 정렬

 

 

버블 정렬 Bubble Sort

1. 정의 : 데이터의 인접 요소끼리 비교하고, SWAP 연산을 수행하며 정렬하는 방식 2. 시간복잡도 : O(n2) 3. 과정(1) 비교 연산이 필요한 루프 범위를 설정한다.(2) 인접한 데이터 값을 비교한다.(3) SW

entwicklerin.tistory.com

 

n = int(input())
nums = [int(input()) for _ in range(n)]

for i in range(n):
  for j in range(n):
    if nums[i] < nums[j]:
      nums[i], nums[j] = nums[j], nums[i]

[print(num) for num in nums]

 

 

결과

맨 위부터 버블정렬, 삽입정렬, sort 함수

 

 

 

같은 메모리를 차지하지만 확실히 파이썬의 함수를 사용하는 것이 훨씬 빠르긴하다...

그래도 알고리즘을 공부하니까 여러 정렬을 알고 있는 편이 좋겠지

같은 문제라도 여러 풀이 방법을 생각해봐야겠다!