BOJ/미해결

BOJ 1083 - 소트

yanJuicy 2024. 8. 10. 12:44
반응형

문제

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

 

 

풀이

그리디 문제다

 

사전 순으로 뒤에 서기 위해 왼쪽에서 오른쪽으로 갈수록 수가 작아져야 한다

왼쪽에서 오른쪽으로 순회한 인덱스를 기준으로 오른쪽에 있는 수 중 남은 s번을 교체해서 가져올 수 있는 최댓값을 매순간 바꿔주면 된다

 

연속된 수만 교체할 수 있는데, 이는 인덱스 차이가 남은 s 이하라면 바로 바꿀 수 있다는 것을 의미한다

- s가 3일 때 3과 5의 위치를 바꾼다 -> 5 3 1 2 4, s = 2

                    1과 4의 위치를 바꾼다 -> 5 3 4 1 2, s = 0

 

 

코드

python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
= int(input())
arr = list(map(int, input().split()))
= int(input())
 
while True:
    sort_done = True
 
    for i in range(n):
        idx = i
        change_step = 0
 
        for j in range(n - 1, i, -1): # i의 오른쪽에서 최대값 찾기
            if arr[idx] < arr[j] and j - i <= s:
                idx = j
                sort_done = False
                change_step = j - i
        
        if idx != i: # 최대값 발견 후 정렬
            temp = arr[idx]
            del arr[idx]
            arr.insert(i, temp) 
            s -= change_step
 
    if sort_done:
        break
 
print(*arr)
cs

 

 

반응형

'BOJ > 미해결' 카테고리의 다른 글

BOJ 1071 - 소트  (0) 2024.08.16
BOJ 11729 - 하노이 탑 이동 순서  (0) 2024.08.15
BOJ 1931 - 회의실 배정  (0) 2024.08.09
BOJ 1541 - 잃어버린 괄호  (0) 2024.08.08
백준 3190 - 뱀  (0) 2024.08.04