정구리의 우주정복

[BOJ] 백준 -다음순열,이전순열,모든순열 파이썬 본문

ALGORITHM/SOLVE

[BOJ] 백준 -다음순열,이전순열,모든순열 파이썬

Jungry_ 2021. 2. 18. 16:18
반응형
#10972 다음 순열

def next_permutation(a):
    i = len(a)-1
    while i > 0 and a[i-1] >= a[i]:
        i -= 1
    if i <= 0:
        return False
    j = len(a)-1
    while a[j] <= a[i-1]:
        j -= 1

    a[i-1],a[j] = a[j],a[i-1]

    j = len(a)-1
    while i < j:
        a[i],a[j] = a[j],a[i]
        i += 1
        j -= 1

    return True


n = int(input())
a = list(map(int,input().split()))
if next_permutation(a):
    print(' '.join(map(str,a)))
else:
    print(-1)

#10973 이전 순열

def prev_permutation(a):
    i = len(a)-1
    while i > 0 and a[i-1] <= a[i]:
        i -= 1
    if i <= 0:
        return False
    j = len(a)-1
    while a[j]>= a[i-1]:
        j -= 1
    
    a[i-1],a[j] = a[j],a[i-1]

    j = len(a)-1
    while i<j:
        a[i],a[j] = a[j],a[i]
        i += 1
        j -= 1
    return True

n = int(input())
a = list(map(int,input().split()))
if prev_permutation(a):
    print(' '.join(map(str,a)))
else:
    print(-1)


#모든 순열

def next_permutation(a):
    i = len(a)-1
    while i > 0 and a[i-1] >= a[i]:
        i -= 1
    if i <= 0:
        return False
    j = len(a)-1
    while a[j] <= a[i-1]:
        j -= 1

    a[i-1],a[j] = a[j],a[i-1]

    j = len(a)-1
    while i < j:
        a[i],a[j] = a[j],a[i]
        i += 1
        j -= 1

    return True

n = int(input())
a = list(range(1,n+1))
while True:
    print(a)
    if not next_permutation(a):
        break

itertools  를 사용하지 않고 직접 구하는 방법 !!! 우하하 소스코드 반복해서 사용해보며 외워둬도 좋을것같음 !

반응형
Comments