[python_파이썬_Pass]백준_15652번_N과 M(4)_백트래킹_풀이
2024. 8. 25. 21:39ㆍ코드리뷰
728x90
반응형
공부하는허딩크 : https://www.youtube.com/live/Q8BKRFH8mW0?feature=shared
이번에도 itertools와 재귀함수를 활용해서 해결해보자
<첫번째 시도 : itertools활용>
라이브러리를 활용하면 정말 깔끔한 코드가 만들어 진다.
import sys
from itertools import combinations_with_replacement as cwr
input = sys.stdin.readline
N, M = map(int, input().split())
nums = list(i for i in cwr(range(1, N + 1), M))
for num in nums:
print(*num)
<두번째 시도 : 재귀함수 활용>
cwr([], 조건)을 어떻게 줄까 조금 고민했으나 중복이 허용되므로 i로 조건을 걸었다.
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
def cwr(seq, start):
if len(seq) == M:
print(*seq)
return
for i in range(start, N + 1):
cwr(seq + [i], i)
cwr([], 1)
<세번째 시도 : depth를 활용>
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
answer = []
def cwr(depth, start):
if depth == M:
print(*answer)
return
for i in range(start, N + 1):
answer.append(i)
cwr(depth + 1, i)
answer.pop()
cwr(0, 1)
백트레킹 문제인 것을 알고 보니까 쉽게 해결할 수 있다. 조금 더 연습을 해서 내것으로 만들어야 겠다.
728x90
반응형
'코드리뷰' 카테고리의 다른 글
[python_파이썬_Pass]백준_2947번_나무 조각_시뮬레이션_풀이 (0) | 2024.08.26 |
---|---|
[python_파이썬_Pass]백준_1547번_공_시뮬레이션_풀이 (0) | 2024.08.26 |
[python_파이썬_Pass]백준_15651번_N과 M(3)_백트래킹_풀이 (0) | 2024.08.25 |
[python_파이썬_Half Pass]백준_15650번_N과 M(2)_백트래킹_풀이 (0) | 2024.08.19 |
[python_파이썬_Half Pass]백준_15649번_N과 M(1)_백트래킹_풀이 (0) | 2024.08.19 |