본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 2502 떡 먹는 호랑이

by 까망 하르방 2021. 2. 17.
반응형

출처: https://www.acmicpc.net/problem/2502

 Input 
6 41  

 Output 

2

7

만족하는 A, B 조합이 1개 이상일 수 있는 Special judge 유형 문제입니다.

 

첫번째 날 떡의 개수 = A, 두번째 날 떡의 개수 = B 라고 했을 때,

▶ A  B  A + B  A + 2B  2A + 3B → 3A + 5B  5A + 8B  8A + 13B

[B의 관점]: 2번째 항부터 계수의 변화가 1 → 1 → 2 → 3 → 5 → 8 → 13 → ... 로서, 피보나치 수열을 형성합니다.

B의 계수가 fibo(n)일 때, A의 계수는 fibo(n-1)에 해당합니다.

 

문제에서 주어지는 D를 고려하면 B의 계수는 fibo(D-1)이며, A의 계수는 fibo(D-2) 입니다.

ex) D = 6 → fibo(4) = 3, fibo(5) = 5 → 3A + 5B = 41(=K)이기 때문에

      → A = 2, B = 7인 경우  3 * 2 + 7 * 5 = 41로 만족합니다.

▶ 피보나치 수열로 A와 B의 계수를 구한 후, A와 B의 숫자에 완전 탐색처리


#include <stdio.h>
 
int fibo(int n) {
    int ret = 1;
    if (n == 1 || n == 2)
        return ret;
 
    int x=1, y=1;
    for (int i = 3; i <= n; ++i) {
        ret = x + y;
        x = y, y = ret;
    }
    return ret;
}
 
int main() {
    int D, K, A = 1, B, sum;
    // freopen("input.txt", "r", stdin);
    scanf("%d %d", &D, &K);
 
    int x = fibo(D - 2), y = fibo(D - 1);
    while (1) {
        sum = 0;
        sum += x * A;
        B = 1;
        while (1) {
            sum += y * B;
            if (sum > K) break;
 
            if (sum == K) {
                printf("%d\n", A);
                printf("%d\n", B);
                return 0;
            }
            sum -= y * B;
            B++;
        }
        A++;
    }
}

반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 2668 숫자 고르기  (0) 2021.02.17
[BOJ] 백준 2578 빙고  (0) 2021.02.17
[BOJ] 백준 2621 카드 게임  (0) 2021.02.17
[BOJ] 백준 10801 카드게임  (0) 2021.02.17
[BOJ] 백준 10798 세로읽기  (0) 2021.02.17

댓글