자료구조, 알고리즘/브루트포스

[백준] 10974 모든 순열(브루트포스) - Python

개른 2023. 4. 5. 10:35

https://www.acmicpc.net/problem/10974

 

10974번: 모든 순열

N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

def permutation(arr, n):
    global chosen, v
    # 원소 담는 리스트에 원소를 저장하다가 n개가 되면 출력 후 함수 종료
    if len(chosen) == n:
        print(*chosen)
        return
    # 반복문을 돌리고
    for i in range(N):
        # 아직 사용하지 않았다면
        if not v[i]:
            # 선택리스트에 저장하고 방문체크한다.
            chosen.append(arr[i])
            v[i] = 1
            # 다시 generate 함수를 반복한다.
            permutation(arr, n)
            # 하나의 순열이 만들어지면 다시 방문체크를 0으로 돌려놓음
            v[i] = 0
            chosen.pop() # 원소 담은거 빼주기
import sys
N = int(sys.stdin.readline())
arr = [i for i in range(N+1)]
arr.pop(0)
chosen = []
v = [0 for _ in range(N+1)]
permutation(arr, N)

 

- 접근방식: chosen에 원소하나씩 넣어주고 방문처리, 출력해야하는 배열 길이 되면 출력하고 방문처리 취소해주고 원소 넣어준거 빼기.

- 느낀점: 조합, 순열 개념 차이 알고, 함수로 구현할줄 알아야겠다..