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

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์™€ ๋™์ผํ•˜๋‹ค.

 

๋ฌธ์ œ

 

15650๋ฒˆ: N๊ณผ M (2)

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

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์ด์ „์— ๋‹ค๋ฃฌ ๋ฌธ์ œ์ธ 15649 N๊ณผ M (1)๋Š” N๊ฐœ์˜ ์ˆซ์ž ์ค‘์— M๊ฐœ์˜ ๊ธธ์ด์˜ ์ˆœ์—ด์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์ด์™€ ๋‹ฌ๋ฆฌ N๊ณผ M (2)๋Š” N๊ฐœ์˜ ์ˆซ์ž ์ค‘์— M๊ฐœ์˜ ์กฐํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ˆœ์—ด์€ (1, 2) (2, 1)์„ ๋ชจ๋‘ ๊ตฌํ•˜์ง€๋งŒ ์กฐํ•ฉ์€ ์ด๋ฅผ ๊ตฌํ•˜์ง€ ์•Š๋Š”๋‹ค.  ์ฆ‰ ์กฐํ•ฉ์€ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์›์†Œ๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ์ƒ๊ฐํ•œ๋‹ค. ์ด๋ฅผ ์กฐํ•ฉ์€ ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š”๋‹ค๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. 15649 N๊ณผ M (1)์—์„œ DFS๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์˜€๋‹ค๋ฉด, ํ•œ ๊ฐ€์ง€ ์กฐ๊ฑด๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

 

 

 ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ฐ ์›์†Œ์— ๋”ฐ๋ผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋Š” ์œ„์™€ ๊ฐ™๋‹ค. ์ฆ‰ 1 ์ดํ›„์— ๋‹ค์Œ ์›์†Œ๋ถ€ํ„ฐ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ž๊ธฐ ์ž์‹ ์„ ์ œ์™ธํ•œ ๋‹ค์Œ๋ถ€ํ„ฐ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•œ ์กฐ๊ฑด์œผ๋กœ DFS์˜ ํ˜ธ์ถœ ์กฐ๊ฑด์— ํ˜„์žฌ ์ธ๋ฑ์Šค ๊ฐ’์„ ์ธ์ž๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

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

from sys import stdin


# ์ˆœ์—ด๊ณผ ๋‹ฌ๋ฆฌ ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ๊ฐ’์ด ํ•„์š”ํ•จ.
def dfs(idx, depth):
    global answer
    # ์žฌ๊ท€ ์ข…๋ฃŒ ์กฐ๊ฑด → ์„ ํƒํ•˜๊ณ ์ž ํ•˜๋Š” ์ˆ˜
    if depth == m:
        answer.append([*check])
    else:
        for i in range(idx, n):
            check[depth] = i + 1
            dfs(i + 1, depth + 1)

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

    for num in answer:
        print(*num)

 

itertools combinations๋ฅผ ํ™œ์šฉํ•œ ํ’€์ด

from itertools import combinations

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