본문 바로가기

Coding test

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


소스코드

n = int(input())
per = []

def dfs() :
  if len(per) == n:
    print(*per)
  for i in range (1, n+1):
    if i not in per :
      per.append(i)
      dfs()
      per.pop()
dfs()

알고리즘

1. for 문을 돌리면서 1부터 n까지 리스트에 넣는다.

2. 길이가 n이면 출력

 

실제로 per에 들어가는 과정은 다음과 같다

1번 루프 : 1 -> dfs() ------------------------------------> 다음에 2, 3을 넣음

2번 루프 : 1은 이미 있으니깐 2를 넣음 -> 1 ,2 -> dfs()   ---> 다음에 3을 넣어야 함

3번 루프 : 1,2 이미 존재 -> 3을 넣고 dfs()

4번 루프 : 1,2,3 -> n이 3이니 print -> for문 다 돌았으니 4번 루프 끝 -> 3번 루프의 per.pop() -> 3을 pop() -> 1,2 3번 루프 끝

-> 2번 루프의 per.pop()  -> 1 -> 2번루프에서 이제 3을 넣어햐하므로 -> 1,3 -> dfs() -> 2를 넣음 -> 1,3,2 -> 모든 루프들 종료 

빈 리스트

1번 루프의 2를 넣음 나머지는 동일