import sys
sys.stdin = open("input.text", "rt")
N = int(input())
data = list(map(int, input().split()))
S = int(input())
# 연속된 두개의 원소만 교환 가능
for i in range(N):
max_num = max(data[i:min(N, i+S+1)])
idx = data.index(max_num) #해당 최댓값..
for j in range(idx, i, -1):
data[j], data[j-1] = data[j-1], data[j]
#이후에 S값 갱신
S -= idx -i
if S == 0:
break
for x in data:
print(x, end = " " )
🎃 코멘트
사전 반대순이라는 말은 리스트를 큰 순서대로 나열하는 것이다. 현재 인덱스를 기준으로 뒤에 가장 큰 값을 비교한다. 남은 횟수가 없으면 종료.
이 문제는 결국 바로 다음 수만 비교하는게 아니라. 현재 위치보다 뒤에 있는 수 중에서 가장 큰 수와 비교하는 방식으로 풀었어야 했다. - 당겨올 수 있도록 !
이 문제의 키 포인트는 만약 S가 5라면 현재위치로부터 5개의 위치에서 가장 큰 값을 맨 앞으로 가져올 수 있다는 점이다.