알고리즘/백준

[백준] 1083 - 소트 (파이썬)

소갱 2022. 2. 21. 18:20
n = int(input())
array = list(map(int,input().split()))
s = int(input())

def findMaxIdx(start,end):
    for i in range(start,end+1):
        if max(array[start:end+1]) == array[i]:
            return i

def changeIdx(maxIdx,targetIdx):
    array[targetIdx:maxIdx+1] = [array[maxIdx]] + array[targetIdx:maxIdx]
    return maxIdx-targetIdx

for i in range(n):
    idx = findMaxIdx(i,i+s)
    s -= changeIdx(idx,i)
    if s == 0:
        break
print(*array)

s의 값이 닿는 한에서 최댓값의 인덱스를 찾고 앞으로 보내는 방식으로 해결하였다.