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에 원소하나씩 넣어주고 방문처리, 출력해야하는 배열 길이 되면 출력하고 방문처리 취소해주고 원소 넣어준거 빼기.
- 느낀점: 조합, 순열 개념 차이 알고, 함수로 구현할줄 알아야겠다..
'자료구조, 알고리즘 > 브루트포스' 카테고리의 다른 글
[백준] 2961 도영이가 만든 맛있는 음식(브루트포스) - Python (0) | 2023.04.18 |
---|---|
[백준] 1436 영화감독 숌(브루트포스) - Python (0) | 2023.04.14 |
[백준] 2309 일곱 난쟁이(브루트포) - Python (0) | 2023.03.04 |