티스토리 뷰

Problem solution

순열 구하기

dev_jun 2022. 7. 28. 16:21

문제 포인트

  • 1~N 번호가 적힌 구슬 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력
  • 맨 마지막에는 총 경우의 수를 출력
  • 출력 순서는 사전순으로 오름차순으로 출력

my_solution

from itertools import permutations

n, m = map(int, input().split())
beads = [i for i in range(1, n + 1)]
beads_per = tuple(permutations(beads, m))

for bead in beads_per:
    print(*bead, end=" ")
    print()
print(len(beads_per))
  • 순열을 구하는 문제이기 때문에 itertools.permutations 사용

solution

res = [0] * n
ch = [0] * (n + 1)
cnt = 0


def recursive(level):
    global cnt
    if level == m:
        for j in range(level):
            print(res[j], end=" ")
        print()
        cnt += 1
    else:
        for i in range(1, n + 1):
            if ch[i] == 0:
                ch[i] = 1
                res[level] = i
                recursive(level + 1)
                ch[i] = 0  # 다시 초기화해줘야 다음 탐색에서 해당 숫자일 때 탐색 가능


recursive(0)
print(cnt)
  • 재귀적으로 구현
  • 중복을 허용하지 않기 때문에 중복으로 가지가 뻗어나가지 않도록 이를 체크할 수 있는 체크 배열을 생성하여 문제 해결

'Problem solution' 카테고리의 다른 글

경로 탐색(그래프 DFS)  (0) 2022.08.04
[leetcode] valid anagram  (0) 2022.07.28
동전 교환  (0) 2022.07.27
중복순열 구하기  (0) 2022.07.27
바둑이 승차  (0) 2022.07.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함