https://www.acmicpc.net/problem/2502
2502번: 떡 먹는 호랑이
첫줄에 첫 날에 준 떡의 개수 A를 출력하고 그 다음 둘째 줄에는 둘째 날에 준 떡의 개수 B를 출력한다. 이 문제에서 주어진 D, K에 대해서는 항상 정수 A, B (1≤A≤B)가 존재한다.
www.acmicpc.net
첫날의 준 떡의 개수는 A, 둘째 날에 준 떡의 개수는 B이므로
셋째 날에는 A+B, 넷째 날에는 A+2B 식으로 늘어난다.
A와 B의 계수를 담을 배열을 각각 만든 후
a[1] = 1, a[2] = 0
b[1] = 0, b[2] = 1 값을 미리 준다.
그다음부터는 피보나치의 수열처럼 계산하면 되므로
for 문을 사용해 값을 얻을 수 있다.
그다음 새로운 for 문을 통해
첫째 날 주는 떡의 개수를 1부터 k까지 늘려가면서
이를 계산하고 남은 떡의 양과 B의 계수가 나누어떨어진다면
첫째 날 주는 떡의 개수와 둘째 날 주는 떡의 개수를 출력하였다.
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int d, k;
int a[31], b[31];
cin >> d >> k;
a[1] = 1;
a[2] = 0;
b[1] = 0;
b[2] = 1;
for (int i = 3; i <= d; i++) {
a[i] = a[i - 1] + a[i - 2];
b[i] = b[i - 1] + b[i - 2];
}
for (int i = 1; i <= k; i++) {
int tmp = k - (a[d] * i);
if (tmp % b[d] == 0) {
cout << i << "\n" << tmp / b[d];
break;
}
}
return 0;
}
'코딩테스트 > Baekjoon' 카테고리의 다른 글
[백준 #6679] 싱기한 네자리 숫자 (C++) (0) | 2021.09.22 |
---|---|
[백준 #1065] 한수 (C++) (0) | 2021.09.20 |
[백준 #10974] 모든 순열 (C++) (0) | 2021.09.18 |
[백준 #2851] 슈퍼 마리오 (C++) (0) | 2021.09.18 |
[백준 #1476] 날짜 계산 (C++) (0) | 2021.09.18 |