본문 바로가기

Coding test

[백준/10972/파이썬] 다음 순열


소스코드

n = int(input())
data = list(map(int, input().split()))

for i in range(n-1, 0, -1):
    if data[i-1] < data[i]:
        for j in range(n-1, 0, -1): 
            if data[i-1] < data[j]:
                data[i-1], data[j] = data[j], data[i-1] 
                data = data[:i] + sorted(data[i:])
                for i in data:
                    print(i, end=' ')
                exit()
print(-1)

알고리즘

DP를 이용해서 permutations를 이용해 그 전의 리스트를 출력하려고 하여 풀면 시간초과가 나는 문제입니다;

그래서 어떤 방식이 있을까 생각해보다가 간단하게 맨 뒤에 숫자부터 시작해서 앞에 숫자보다 큰 경우 자리를 바꾼다음 출력해주면 되겠구나 하고 생각해서 풀었더니 잘 풀렸습니다.