ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

N๊ณผ M ์‹œ๋ฆฌ์ฆˆ

  • ์›์†Œ๊ฐ€ ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ
    • N๊ณผ M (5 ~ 8)
    • N๊ณผ M (1 ~ 4)์—์„œ ์›์†Œ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.
  • ์ค‘๋ณต ์›์†Œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ
    • 15663 N๊ณผ M (9)
    • N๊ณผ M (10 ~ 12)๋Š” (9)์™€ ๊ฐ™์ด set์„ ํ™œ์šฉํ•˜๋ฉฐ ๋กœ์ง์€ N๊ณผ M 2 - 4์™€ ๋™์ผํ•˜๋‹ค.

 

๋ฌธ์ œ

 

15649๋ฒˆ: N๊ณผ M (1)

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 N๊ฐœ์˜ ์ž์—ฐ์ˆ˜์—์„œ ๊ธธ์ด๊ฐ€ M์ธ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด๋Š” DFS๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ itertools๋ฅผ ์ด์šฉํ•ด ํ’€ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ผ์„ฑ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” itertools๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๋“ค์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์ˆœํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์–ด๋–ค ์›๋ฆฌ๋กœ ๋‹ต์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 DFS๋ฅผ ํ†ตํ•ด ์ˆœ์—ด์„ ๊ตฌํ•˜๊ฒŒ ๋˜๋ฉด depth 0 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. ์ˆœ์—ด์€ ๊ฐ ์›์†Œ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ์—, ํ•˜๋‚˜์˜ ์›์†Œ๋ฅผ ์„ ํƒํ•  ๋•Œ ์ค‘๋ณต์œผ๋กœ ์„ ํƒ๋˜์ง€ ์•Š๋„๋ก ์ฒดํฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, DFS depth๋Š” ์„ ํƒํ•œ ์›์†Œ์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๊ฒŒ ๋˜๋ฉฐ, DFS ๋‚ด๋ถ€์—์„œ N๋งŒํผ์˜ ๋ฐ˜๋ณต์„ ํ†ตํ•ด DFS๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ฐ€์ง€๋ฅผ ๋ปฃ์œผ๋ฉฐ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

DFS๋ฅผ ์‚ฌ์šฉํ•œ ๋ฌธ์ œ ํ’€์ด

from sys import stdin


def dfs(depth):
    global answer
    # ์žฌ๊ท€ ์ข…๋ฃŒ ์กฐ๊ฑด → ์„ ํƒํ•˜๊ณ ์ž ํ•˜๋Š” ์ˆ˜
    if depth == m:
        answer.append([*check])
    else:
        for i in range(n):
            # ์ˆซ์ž๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ + 1
            # ์ค‘๋ณต ์„ ํƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฒดํฌํ•จ
            if i + 1 in check:
                continue
            # ์ค‘๋ณต ์ฒดํฌ ๋ฐฉ์ง€
            check[depth] = i + 1
            dfs(depth + 1)
            # ํ˜ธ์ถœ ํ›„ ๋‹ค์‹œ ํ•ด์ œ
            check[depth] = 0

if __name__ == '__main__':
    answer = []
    n, m = map(int, stdin.readline().split())
    check = [0] * m
    dfs(0)

    for num in answer:
        print(*num)

 

itertools permutation์„ ํ™œ์šฉํ•œ ํ’€์ด

from itertools import permutations

N, M = map(int, input().split())
nums = [num + 1 for num in range(N)]
for cases in permutations(nums, M):
    for case in cases:
        print(case, end=' ')
    print()
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€