๐ง๐ป [Python] ๋ฐฑ์ค 15650 N๊ณผ M 2
Silver 3 - Backtracking
์ฝ๊ฒ itertools์ combinations๋ฅผ ์ฌ์ฉํด์ ํ ์ ์๋ ๋ฌธ์ ๋ค
ํ์ง๋ง Backtracking์ ๊ณต๋ถํ๊ณ ์ถ์ด์ ํ์๋ ๋ฌธ์ ๋ค
- ๊ธฐ๋ณธ์ ์ผ๋ก if len(nums) == M: ์ ํตํด์ ์ฌ๊ท ํจ์์ base case๋ฅผ ๋ง๋ ๋ค
- ์ ๋ง๋ค๋ฉด ๋ฌดํ ๋ฃจํ
- ๋ฆฌ์คํธ ์์ for๋ฌธ์ ๋๋ฉฐ, ๋์ค๋ ์ซ์๊ฐ ์์ ๋, ๋ฆฌ์คํธ ์์ ํด๋น ์ซ์๋ฅผ ๋ฃ๊ณ backtracking(start)๋ฅผ ๋ค์ ๋๋ค
- ์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์, ์์ด์ด ์ค๋ฆ์ฐจ์์ด์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค
- ๊ทธ๋์ ์ฌ๊ทํจ์๋ฅผ ๋๋ฆด๋๋ง๋ค backtracking(start + 1)๋ฅผ ํด์ผ ํ๋ค
- ๊ทธ๋ ๊ฒ ํ๋ฉด, for๋ฌธ์์ ์ ์์ backtracking() ํ๋ ๊ฒ๋ณด๋ค, ํฐ ์๋ถํฐ for๋ฌธ์ ์ํํ๋ค
- ๊ทธ๋ฆฌ๊ณ l.pop()์ ํด์ผ, ๋ฆฌ์คํธ์ ์ซ์๊ฐ ์ฌ๋ผ์ง๊ณ , ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฃ์ ์ ์๋ค
์ฝ๋
๋ฐฑํธ๋ํน ์ฌ์ฉ
N, M = map(int, input().split())
nums = []
def backtracking(start):
if len(nums) == M:
print(' '.join(map(str, nums)))
return
for num in range(start, N + 1):
if num not in nums:
nums.append(num)
backtracking(num + 1)
nums.pop()
backtracking(1)
combinations ์ฌ์ฉ
from itertools import combinations
N, M = map(int, input().split())
num_list = [num for num in range(1, N + 1)]
for nums in combinations(num_list, M):
print(" ".join(map(str, list(nums))))
'์๊ณ ๋ฆฌ์ฆ > DFS BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 14888 ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2023.04.07 |
---|---|
[Python] ๋ฐฑ์ค 9663 N-Queen (0) | 2023.04.05 |
[Python] ๋ฐฑ์ค 15649 N๊ณผ M (0) | 2023.04.02 |
[Python] ๋ฐฑ์ค 1915 ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ (0) | 2023.03.31 |
[Python] ๋ฐฑ์ค 1389 ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น (0) | 2023.03.29 |