[백준/Python] 3040. 백설 공주와 일곱 난쟁이

2024. 10. 26. 12:07·코딩테스트/BAEKJOON
728x90
반응형

🍀 문제유형: 브루트포스/ DFS 

🍀  문제설명(링크참조) 

https://www.acmicpc.net/problem/3040

🍀  풀이코드 

# 방법1. DFS 

# 11:35 start 56 end
# dfs..
def dfs(i, total, result, cnt):
    global answer
    if cnt == 7:
        if total == 100 :
            answer = result
            return
    if i == 9:
        return # cnt = 7 이지만 100이 아니면 멈춰야 해
    #i 포함 X
    dfs(i+1, total, result, cnt)
    #i 포함 O
    dfs(i+1, total+nums[i], result+" "+str(nums[i]), cnt+1)

nums = []
answer = ""
for _ in range(9):
    nums.append(int(input()))

dfs(0, 0, "", 0)
for i in answer.split():
    print(i)

 

RecursionError: maximum recursion depth exceeded in comparison 이런 에러가 떴었다. 

빠져나올 구멍을 다 안 만들어서이니까.. 구글링을 조금 했다. 대부분 브루트포스로 쉽게 풀이하셨지만, dfs로도 풀어보고 싶었다..ㅎㅎ 여튼 그래서 살펴보니까 9명 중 7명을 선택한다/ 9명 모두 살펴봤지만 100이 아닐 수도 있다 이 조건을 놓치고 있었다. cnt 를 인자에 추가해 7명일 때 100인지 살펴볼 수 있게 했고, 아래 코드를 추가해 2번째 조건도 해결하니까 맞출 수 있었다. 

 

dfs 풀이할 때 주의할 점은 꼭 정답일 때만 탈출하는 것이 아니니까, 그 외에 인덱스 오버 될 때 또는 또 다른 조건을 만족할 때는 return 할 수 있도록 만들어야 한다. 

if i == 9: return

 

# 방법2. 브루트포스 

from itertools import combinations
nums = []
for _ in range(9):
    nums.append(int(input()))

# dfs(0, 0, "", 0)
for l in combinations(nums, 7):
    if sum(l) == 100:
        for i in l: print(i)
728x90
반응형
저작자표시 비영리 변경금지

'코딩테스트 > BAEKJOON' 카테고리의 다른 글

[백준/Python] 1449번. 수리공 항승  (0) 2024.10.26
[백준/Python] 3085. 사탕게임  (1) 2024.10.26
[백준/Python] 2075. N번째 큰 수  (0) 2024.10.25
[백준/Python] 1935. 후위 표기식 2  (1) 2024.10.25
[백준/Python] DFS/BFS-5014번. 스타트링크  (1) 2024.10.12
'코딩테스트/BAEKJOON' 카테고리의 다른 글
  • [백준/Python] 1449번. 수리공 항승
  • [백준/Python] 3085. 사탕게임
  • [백준/Python] 2075. N번째 큰 수
  • [백준/Python] 1935. 후위 표기식 2
heeya16
heeya16
개발 공부 냠냠
  • heeya16
    개발자 희야
    heeya16
  • 전체
    오늘
    어제
    • 분류 전체보기 (106)
      • 코딩테스트 (66)
        • 프로그래머스 (38)
        • SWEA (2)
        • BAEKJOON (26)
      • 알고리즘 (7)
      • 자료구조 (19)
      • 프로젝트 (5)
      • 취업 주르륵 (3)
      • 데이터베이스 (0)
      • IT지식 (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    1003
    10448
    10773
    10월
    10진수
    11047
    11399
    11403
    11866
    1449
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
heeya16
[백준/Python] 3040. 백설 공주와 일곱 난쟁이
상단으로

티스토리툴바