Skip to content

Commit 148c4d0

Browse files
committed
[Silver I] Title: 떡 먹는 호랑이, Time: 160 ms, Memory: 17696 KB -BaekjoonHub
1 parent 5bc5f9f commit 148c4d0

2 files changed

Lines changed: 86 additions & 0 deletions

File tree

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# [Silver I] 떡 먹는 호랑이 - 2502
2+
3+
[문제 링크](https://www.acmicpc.net/problem/2502)
4+
5+
### 성능 요약
6+
7+
메모리: 17696 KB, 시간: 160 ms
8+
9+
### 분류
10+
11+
수학, 다이나믹 프로그래밍, 브루트포스 알고리즘
12+
13+
### 제출 일자
14+
15+
2026년 1월 30일 12:33:46
16+
17+
### 문제 설명
18+
19+
<p>하루에 한 번 산을 넘어가는 떡 장사 할머니는 호랑이에게 떡을 주어야 산을 넘어갈 수 있는데, 욕심 많은 호랑이는 어제 받은 떡의 개수와 그저께 받은 떡의 개수를 더한 만큼의 떡을 받아야만 할머니를 무사히 보내 준다고 한다. </p>
20+
21+
<p>예를 들어 첫째 날에 떡을 1개 주었고, 둘째 날에는 떡을 2개 주었다면 셋째 날에는 1+2=3개, 넷째 날에는 2+3=5개, 다섯째 날에는 3+5=8개, 여섯째 날에는 5+8=13개를 주어야만 무사히 산을 넘어갈 수 있다. </p>
22+
23+
<p>우리는 산을 무사히 넘어온 할머니에게 오늘 호랑이에게 몇 개의 떡을 주었는지, 그리고 오늘이 호랑이를 만나 떡을 준지 며칠이 되었는지를 알아내었다. 할머니가 호랑이를 만나서 무사히 넘어온 D째 날에 준 떡의 개수가 K개임을 알 때, 여러분은 할머니가 호랑이를 처음 만난 날에 준 떡의 개수 A, 그리고 그 다음 날에 호랑이에게 준 떡의 개수 B를 계산하는 프로그램을 작성하시오. 이 문제에서는 항상 1 ≤ A ≤ B 이다.</p>
24+
25+
<p>예를 들어 여섯 번째 날에 산을 무사히 넘어온 할머니가 호랑이에게 준 떡이 모두 41개라면, 호랑이를 만난 첫 날에 준 떡의 수는 2개, 둘째 날에 준 떡의 수는 7개이다. 즉 셋째 날에는 9개, 넷째 날에는 16개, 다섯째 날에는 25개, 여섯째 날에는 41개이다. 따라서 A=2, B=7 이 된다. 단 어떤 경우에는 답이 되는 A, B가 하나 이상일 때도 있는데 이 경우에는 그 중 하나만 구해서 출력하면 된다.</p>
26+
27+
### 입력
28+
29+
<p>첫째 줄에는 할머니가 넘어온 날 D (3 ≤ D ≤ 30)와 그 날 호랑이에게 준 떡의 개수 K (10 ≤ K ≤ 100,000)가 하나의 빈칸을 사이에 두고 주어진다. </p>
30+
31+
### 출력
32+
33+
<p>첫줄에 첫 날에 준 떡의 개수 A를 출력하고 그 다음 둘째 줄에는 둘째 날에 준 떡의 개수 B를 출력한다. 이 문제에서 주어진 D, K에 대해서는 항상 정수 A, B (1≤ A ≤ B)가 존재한다. </p>
34+
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
static int d;
6+
static int k;
7+
8+
public static void main(String[] args) throws IOException {
9+
Scanner sc = new Scanner(System.in);
10+
d = sc.nextInt();
11+
k = sc.nextInt();
12+
solve();
13+
14+
}
15+
16+
public static void solve() {
17+
18+
// ricecake[1] = // 1부터 시작해서 41개까지 2
19+
// ricecake[2] = // ricecake[1] + 1
20+
// ricecake[3] = ricecake[1] + ricecake[2];
21+
// ricecake[4] = ricecake[2] + ricecake[3];
22+
// ricecake[5] = ricecake[3] + ricecake[4];
23+
// ricecake[6] = ricecake[4] + ricecake[5];
24+
25+
for (int i = 1; i < k; i++) {
26+
for (int j = i + 1; j < k; j++) {
27+
if (dfs(i, j, 3)) {
28+
System.out.println(i);
29+
System.out.println(j);
30+
return;
31+
}
32+
}
33+
}
34+
35+
}
36+
37+
public static boolean dfs(int ppre, int pre, int day) {
38+
if (ppre + pre > k) {
39+
return false;
40+
}
41+
42+
if (day == d) {
43+
if (ppre + pre == k) {
44+
return true;
45+
}
46+
return false;
47+
}
48+
49+
return dfs(pre, ppre + pre, day + 1);
50+
}
51+
52+
}

0 commit comments

Comments
 (0)