"다음 순열" 방식을 이용해서 코딩을 했다. 하지만 아직 남은 의문이 있다..
왜 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를 활용
'Data Science > 알고리즘 공부' 카테고리의 다른 글
[백준][알고리즘] 14888 연산자 끼워넣기 (0) | 2020.04.06 |
---|---|
[백준][파이썬] 10971 원판원 순회2 - 시간초과.. (0) | 2020.04.06 |
[백준][파이썬] 10973 이전순열 (0) | 2020.04.02 |
[백준][파이썬] 7569 토마토(2) - 3차원 (0) | 2020.04.01 |
[백준][파이썬] 2178 미로탈출 (최단거리) (0) | 2020.03.30 |
댓글