https://www.acmicpc.net/problem/2502
2502번: 떡 먹는 호랑이
첫줄에 첫 날에 준 떡의 개수 A를 출력하고 그 다음 둘째 줄에는 둘째 날에 준 떡의 개수 B를 출력한다. 이 문제에서 주어진 D, K에 대해서는 항상 정수 A, B (1≤ A ≤ B)가 존재한다.
www.acmicpc.net
풀이
d-1번째 날에 호랑이에게 준 떡의 개수를 정하면 나머지날의 호랑이에게 준 떡의 개수가 정해지기 때문에
d-1번째 떡의 수를 k/2+1부터 k까지 늘려가면서 가능한 경우를 출력했다.
떡의 개수가 음수가 되거나 n-1날 준 떡의 개수가 n번째보다 커지게 되면 안되기 때문에 return 했다.
#include<iostream>
using namespace std;
int d, k;//할머니가 넘어 온 날, 떡의 개수
//6 41
int a, b;
void mountain(int day, int riceCake1, int riceCake2)
{
if (riceCake1 < 1 ||riceCake1>riceCake2 )
return;
if (day == d)
{
cout << riceCake1 << "\n" << riceCake2;
exit(0);
}
mountain(day + 1,riceCake2-riceCake1, riceCake1);
}
int main()
{
cin >> d >> k;
for (int i = k / 2 + 1; i < k; i++)
{
mountain(2, i, k);
}
}
다른 사람의 풀이
1 일 a 개
2 일 b개
3 일 a+b개
4 일 a+2b개
5일 2a+3b개
6일 3a+5b개
a에 붙는 계수는 1 0 1 1 2 3 5 ... 이를 배열에 담아서 A[4]=2로 표현
b에 붙는 계수는 0 1 1 2 3 5 ... 배열 A를 한칸씩 앞으로 당긴것과 비슷
k=A[d-1]*a +A[d]*b b=(k-A[d-1]*a) /A[d]
a를 늘려가면서 아래 식이 만족하는 값을 찾으면 된다. (떡의 개수는 정수이기 때문에)
(k-A[d-1]*a) %A[d]==0
그리고 a의 값과 (k-A[d-1]*a) /A[d]을 출력해주면 된다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 22252 정보 상인 호석 c++ (0) | 2023.01.05 |
---|---|
[백준] 17829 222-풀링 c++ (0) | 2023.01.05 |
[백준] 1707 이분 그래프 C++ (0) | 2022.12.29 |
[백준] 14503 로봇 청소기 C++ (0) | 2022.12.29 |
[백준] 6236 용돈 관리 c++ (0) | 2022.09.22 |