10973번: 이전 순열

첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다.

www.acmicpc.net

 

 

<내 코드>

 

N = int(input())
nums = list(map(int, input().split()))

k = N-2
check = False
while k > -1:
    if nums[k] > nums[k+1]:
        for i in range(k+1, len(nums)):
            if nums[i] < nums[k]:  # k 이후에서 nums[k]보다 작은 것중 가장 큰 인덱스 찾음
                m = i
                check = True
    if check == True:
        break

    k -= 1


if check == False:
    print(-1)
else:
    # k, m 값 바꾸기
    nums[k], nums[m] = nums[m], nums[k]

    # k 이후 값 내림차순 정렬
    tmp = nums[k+1:]
    tmp.sort(reverse=True)

    ans = nums[:k+1] + tmp
    print(*ans)

진짜 짜증나는 문제였다..

반응형

+ Recent posts