https://www.acmicpc.net/problem/1083
n = int(input())
arr = list(map(int, input().split()))
s = int(input())
for i in range(n):
if s <= 0: # 교환 횟수가 모두 소진되면 종료
break
# 현재 위치에서 S 범위 내 가장 큰 값의 인덱스 찾기
max_idx = i
for j in range(i + 1, min(i + s + 1, n)):
if arr[j] > arr[max_idx]:
max_idx = j
# 가장 큰 값이 이미 현재 위치라면 스킵
if max_idx != i:
# max_idx의 값을 앞으로 이동
for k in range(max_idx, i, -1):
arr[k], arr[k - 1] = arr[k - 1], arr[k]
# 이동 횟수 차감
s -= (max_idx - i)
print(*arr)
단순히 내림차순 버블정렬 할 게 아니라, 교환할 수 있는 범위 내에서 가장 큰 값을 최대한 맨앞으로 옮겨와야함!!
'백준' 카테고리의 다른 글
백준 15686. 치킨 배달 (0) | 2024.11.19 |
---|---|
백준 17182. 우주 탐사선 (0) | 2024.11.17 |
백준 2179. 비슷한 단어 (0) | 2024.11.13 |
백준 2056. 작업 (0) | 2024.11.13 |
백준 14916. 거스름돈 (0) | 2024.11.11 |