문제
https://www.acmicpc.net/problem/23881
풀이
선택정렬 알고리즘을 사용해서 문제를 풀면 된다.
선택 정렬이란?
1. 주어진 리스트 값 중에 최소값을 찾는다.
2. 그 값을 맨 앞에 위치한 값과 swap 한다.
3. 위 작업을 반복한다.
- 선택 정렬의 시간복잡도 : O(N^2)
- 공간 복잡도: O(1)
코드
n,k = map(int,input().split())
numbers = list(map(int,input().split()))
cnt = 0
def selection(numbers):
global cnt
ans = []
for i in range(n-1, 0, -1):
max,index = numbers[0],0
for j in range(0, i+1):
if numbers[j] > max:
max, index = numbers[j], j
if i != index:
numbers[i], numbers[index] = numbers[index], numbers[i]
cnt += 1
if cnt == k:
ans.append(numbers[index])
ans.append(numbers[i])
return ans
ans.append(-1)
return ans
print(*selection(numbers))
'Algorithm > Backjoon' 카테고리의 다른 글
[백준] 10703 파이썬 - 유성 (5) | 2024.10.09 |
---|---|
[백준] 1038 파이썬 - 감소하는 수 (0) | 2024.09.20 |
[백준] 2583 파이썬 - 영역 구하기 (0) | 2024.09.09 |
[백준] 15686번 파이썬 - 치킨 배달 (0) | 2024.08.30 |
[백준] 18405번 파이썬 - 경쟁적 전염 (0) | 2024.08.27 |