[파이썬] 백준 1234 : 크리스마스 트리 (골드2)
1234번: 크리스마스 트리
첫째 줄에 트리의 크기 N, 빨강의 개수, 초록의 개수, 파랑의 개수가 주어진다. N은 10보다 작거나 같다. 빨강, 초록, 파랑의 개수는 0보다 크거나 같고, 100보다 작거나 같다.
www.acmicpc.net
문제
풀이
방향성 생각
- 트리 높이가 10이고 각 높이에 같은 개수로 채우는 방식이 매우 제한적이다.
- 하드코딩으로 높이마다 처리해주기
- 처음에 개수를 많이 소모해야 가지치기로 불필요한 케이스를 많이 잘라낼 수 있다.
- 낮은 높이부터 채워서 꼭대기로 올라간다.
- 만약 쌓다가 공이 부족하면 탈출. 끝까지 올라갈 수 있으면 리스트에 저장한 가짓수를 모두 곱해서 answer에 더한다.
전체코드
n,red,green,blue = list(map(int,input().split()))
answer = 0
def dfs(stage,r,g,b,info):
global answer
if r<0 or g<0 or b<0:
return
if stage == 0:
temp = 1
for i in info:
temp *= i
answer += temp
if stage == 10:
dfs(stage-1,r-10,g,b,info+[1])
dfs(stage-1,r,g-10,b,info+[1])
dfs(stage-1,r,g,b-10,info+[1])
dfs(stage-1,r-5,g-5,b,info+[252])
dfs(stage-1,r-5,g,b-5,info+[252])
dfs(stage-1,r,g-5,b-5,info+[252])
elif stage == 9:
dfs(stage-1,r-9,g,b,info+[1])
dfs(stage-1,r,g-9,b,info+[1])
dfs(stage-1,r,g,b-9,info+[1])
dfs(stage-1,r-3,g-3,b-3,info+[1680])
elif stage == 8:
dfs(stage-1,r-8,g,b,info+[1])
dfs(stage-1,r,g-8,b,info+[1])
dfs(stage-1,r,g,b-8,info+[1])
dfs(stage-1,r-4,g-4,b,info+[70])
dfs(stage-1,r-4,g,b-4,info+[70])
dfs(stage-1,r,g-4,b-4,info+[70])
elif stage == 7:
dfs(stage-1,r-7,g,b,info+[1])
dfs(stage-1,r,g-7,b,info+[1])
dfs(stage-1,r,g,b-7,info+[1])
elif stage == 6:
dfs(stage-1,r-6,g,b,info+[1])
dfs(stage-1,r,g-6,b,info+[1])
dfs(stage-1,r,g,b-6,info+[1])
dfs(stage-1,r-3,g-3,b,info+[20])
dfs(stage-1,r-3,g,b-3,info+[20])
dfs(stage-1,r,g-3,b-3,info+[20])
dfs(stage-1,r-2,g-2,b-2,info+[90])
elif stage == 5:
dfs(stage-1,r-5,g,b,info+[1])
dfs(stage-1,r,g-5,b,info+[1])
dfs(stage-1,r,g,b-5,info+[1])
elif stage == 4:
dfs(stage-1,r-4,g,b,info+[1])
dfs(stage-1,r,g-4,b,info+[1])
dfs(stage-1,r,g,b-4,info+[1])
dfs(stage-1,r-2,g-2,b,info+[6])
dfs(stage-1,r-2,g,b-2,info+[6])
dfs(stage-1,r,g-2,b-2,info+[6])
elif stage == 3:
dfs(stage-1,r-3,g,b,info+[1])
dfs(stage-1,r,g-3,b,info+[1])
dfs(stage-1,r,g,b-3,info+[1])
dfs(stage-1,r-1,g-1,b-1,info+[6])
elif stage == 2:
dfs(stage-1,r-2,g,b,info+[1])
dfs(stage-1,r,g-2,b,info+[1])
dfs(stage-1,r,g,b-2,info+[1])
dfs(stage-1,r-1,g-1,b,info+[2])
dfs(stage-1,r-1,g,b-1,info+[2])
dfs(stage-1,r,g-1,b-1,info+[2])
elif stage == 1:
dfs(stage-1,r-1,g,b,info+[1])
dfs(stage-1,r,g-1,b,info+[1])
dfs(stage-1,r,g,b-1,info+[1])
dfs(n,red,green,blue,[])
print(answer)
코멘트
코드가 길어져서그렇지 복붙하면 금방이다..
'Algorithm > etc' 카테고리의 다른 글
[파이썬] 프로그래머스 : 모음사전 (Lv.2) (0) | 2023.11.30 |
---|---|
[파이썬] 프로그래머스 : 타겟 넘버 (Lv.2) (0) | 2023.11.10 |
[파이썬] 백준 1405 : 미친로봇 (골드4) (0) | 2023.11.05 |
[파이썬] 백준 17825 : 주사위 윷놀이 (골드2) (0) | 2023.10.22 |
[파이썬] 백준 14391 : 종이 조각 (골드3) (0) | 2023.10.22 |
[파이썬] 프로그래머스 : 불량 사용자 (Lv.3) (0) | 2023.10.13 |
[파이썬] 백준 1749 : 점수따먹기 (골드4) (0) | 2023.09.11 |
댓글