본문 바로가기
Data Science/알고리즘 공부

[백준][파이썬] 10974 모든 순열

by titaniumm 2020. 4. 5.

"다음 순열" 방식을 이용해서 코딩을 했다. 하지만 아직 남은 의문이 있다..

왜 len(lit) == 2를 continue를 추가로 작성해줘야하는지 의문이다.

lit가 2일때 넘겨주면 len(lit)에서 타입에러가 발생하여 저렇게 처리해주긴했지만, 왜그런지는 아직 에러를 못잡았다.

num = int(input())
def per(lit):
    n = len(lit)-1
    i = n
    while i>0 and lit[i-1] > lit[i]:
        i -= 1
    if i == 0:
        return 0
    print(*lit)
    j = n
    while lit[i-1] > lit[j] and j>0:
        j -= 1
    lit[i-1],lit[j] =lit[j],lit[i-1]
    j = n
    while i < j:
        lit[i] ,lit[j] = lit[j],lit[i]
        i += 1
        j -= 1
    return lit

lit = [i for i in range(1,num+1)]
while True:
    if per(lit) == 0:
        for i in range(num,0,-1):
            print(i,end=" ")
        break
    if len(lit) ==2:
        continue
    per(per(lit))


 순열을 푸는 방법 3가지를 모두 익히자

1. 위처럼 다음순열을 이용하여 푸는것

2. 재귀함수를 이용한것

3. itertools를 활용

댓글