[백준] 10972번 (python 파이썬) 다음 순열

2021. 4. 4. 17:49발돋움/알고리즘

728x90
반응형

입력으로 주어진 순열의 다음 순열을 찾는 문제이다.

만약 다음 순열이 없다면 (입력으로 주어진 순열이 마지막 순열) -1 을 출력해야한다.

순열들을 살펴보면 바뀌어야하는 

같은 방법으로 푼 코드는 두가지이다.

def check(n):
    for i in range(n - 1, 0, -1):
        if lst[i - 1] < lst[i]: #앞이 바뀌어야할 타이밍
            for j in range(n - 1, 0, -1): #적절한 수 찾기 현재 바꿀 위치수보다 1만큼 큰 수
                if lst[j] > lst[i - 1]:
                    lst[i - 1], lst[j] = lst[j], lst[i -1]
                    lst = lst[:i] + sorted(lst[i:])
                    return ' '.join(map(str, lst))
    return -1

n = int(input())
lst = list(map(int, input().split()))
print(check(n))
def makenewlst(first, sortlst):
    sortlst.sort()
    first += sortlst
    return ' '.join(map(str, first))

def check(n):
    for i in range(n - 1, 0, -1):
        if lst[i - 1] < lst[i]: #앞이 바뀌어야할 타이밍
            for j in range(n - 1, 0, -1): #적절한 수 찾기 현재 바꿀 위치수보다 1만큼 큰 수
                if lst[j] > lst[i - 1]:
                    lst[i - 1], lst[j] = lst[j], lst[i -1]
                    return makenewlst(lst[:i], lst[i:])
    return -1

n = int(input())
lst = list(map(int, input().split()))
print(check(n))

 

728x90

위는 내가 그린 설명으로 이해가 안간다면 보는 것을 추천한다.

728x90
반응형