문제요약
나의 코드 및 설명
def dfs(n, start, temp_list):
if len(temp_list) == 6: #전달받은 임시 리스트 길이가 6이라면
result.append(temp_list) #추가
return
if n == count:
return
for i in range(start, count):
dfs(n+1, i+1, temp_list + [num_list[i]])
while True:
num_list = list(map(int, input().split()))
if num_list == [0]: #0을 입력받는다면 반복문 탈출
break
count = num_list.pop(0)
result = []
dfs(0,0,[])
for i in result:
print(" ".join(map(str, i)))
print()
피드백
이전에 많이 풀어본 백트래킹 문제와 유사한 문제이다. 백트래킹에서 하위 함수의 변수에 임시 리스트를 지정하고, 조건에 도달했을 때 정답 리스트에 추가하고, 다시 돌아왔을 때 pop해주지 않는 식으로 문제를 해결했는데, 멀티 트리에서 이 방식은 상당히 유용한 것 같다. pop했을 때 얕은 복사로 인한 문제가 발생할 가능성이 있는데, 이렇게 풀면 얕은 복사로 인한 문제를 사전에 방지할 수 있다.
'Baekjoon > 백트래킹' 카테고리의 다른 글
[백준] 2529 부등호 (실버1) / 백트래킹 (0) | 2023.04.27 |
---|---|
[백준] 18429 근손실 (실버3) / 백트래킹 (0) | 2023.04.26 |
[백준] 1182 부분수열의 합 (실버2) / 백트래킹 (1) | 2023.04.23 |
🥇[백준] 1759 암호 만들기 (골드5) / 백트래킹 (0) | 2023.04.21 |
🥇[백준] 9663 N-Queen (골드4) / 백트래킹, 룩업테이블 (1) | 2023.04.16 |