[백준] 10973번 (python 파이썬) 이전 순열

2021. 4. 4. 18:14발돋움/알고리즘

728x90
반응형
728x90

10972번에서 조건만 거꾸로 해주면 되는 문제이다.

10972조건은 아래에 상세하게 설명했으니 참고하면 된다.

 

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

입력으로 주어진 순열의 다음 순열을 찾는 문제이다. 만약 다음 순열이 없다면 (입력으로 주어진 순열이 마지막 순열) -1 을 출력해야한다. 순열들을 살펴보면 바뀌어야하는 같은 방법으로 푼 코

happytum.tistory.com

def makenewlst(first, sortlst):
    sortlst.sort(reverse = True)
    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))
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 ' '.join(map(str, lst[:i] + sorted(lst[i:], reverse = True)))
    return -1

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

위 그림은 이전 순열 찾는 코드를 이해하는 법이다.

728x90
반응형