Algorithm/백준

[백준] 10972 다음순열

sunnyshiny 2023. 3. 17. 19:46
728x90

https://www.acmicpc.net/problem/10972

 

10972번: 다음 순열

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

www.acmicpc.net

 

from itertools  import permutations

n = int(input())
array = list(map(int, input().split()))
perm = list(permutations(range(1, n+1), n))

for i in range(1, len(perm)):
    if list(perm[i-1]) == array:
        print(' '.join(map(str, perm[i])))
        break
    if i == len(perm)-1:
        print('-1')

메모리 초과 오류가 발생 한다 permutaion을 이용하면 메모리를 많이 차지 하기 때문에 다른 방법을 구상해야 한다. 

 

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

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

print(-1)
728x90