Skip to content

Commit 658e2e0

Browse files
committed
[Silver I] Title: 떡 먹는 호랑이, Time: 100 ms, Memory: 14168 KB -BaekjoonHub
1 parent 4f31788 commit 658e2e0

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed
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+
메모리: 14168 KB, 시간: 100 ms
8+
9+
### 분류
10+
11+
브루트포스 알고리즘, 다이나믹 프로그래밍, 수학
12+
13+
### 제출 일자
14+
15+
2024년 12월 5일 11:04:51
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: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
public static void main(String[] args) throws IOException {
6+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
8+
StringTokenizer st = new StringTokenizer(br.readLine());
9+
10+
int D = Integer.parseInt(st.nextToken());
11+
int K = Integer.parseInt(st.nextToken());
12+
13+
if(D ==3) {
14+
System.out.println(1);
15+
System.out.println(K-1);
16+
17+
}
18+
else {
19+
int x =1, y=1;
20+
21+
for(int i =4; i<=D; i++) {
22+
int temp =y;
23+
y = x+y;
24+
x= temp;
25+
}
26+
int size = K/y;
27+
28+
for(int i = size-1; i>=0; i--) {
29+
if((K - (i*y)) % x ==0 ){
30+
System.out.println(((K - (i*y)) / x));
31+
System.out.println(i);
32+
break;
33+
}
34+
}
35+
}
36+
}
37+
}

0 commit comments

Comments
 (0)