백준 2502 떡 먹는 호랑이
2023. 2. 23. 00:22ㆍ코딩 공부 연습
반응형
백준 2502 떡 먹는 호랑이
오늘은 떡먹는 호랑이라는 문제를 풀어보았다.
사실 이 문제는 그냥 머리 굴려서 풀어보라고 하면 되게 쉬운 문제이다.
첫 날 준 떡을 a개, 둘째날 준 떡을 b개라고 했을 때 그 a,b 가 n번째 되는날 몇개씩 있는지 확인해 값을 대입해 찾기만 하면 되는데, 이 a,b 값이 뭔지 모르는 상태에서 더해가며 가져가는것 구현을 잘 생각을 해야 한다.
난 그래서 크기2 짜리 벡터를 만들어 a 와 b 의 개수를 저장하는 dp 를 만들었다. 그 후, i 를 1부터 i*a의 개수 값이 k 보다 작을 때까지 순회하며 만족하는 a,b 값을 찾으면 바로 리턴하도록 했다!
for (int i = 3; i <=d ;i++)
{
dp[i][0] = dp[i-1][0] + dp[i-2][0];
dp[i][1] = dp[i-1][1] + dp[i-2][1];
}
아이디어가 어렵지 않아서 풀 수 있던 것 같다. 사실 dp인지도 잘 모르겠음ㅎ
#include <iostream>
#include <vector>
using namespace std;
long long dp[33][2];
int main()
{
int d, k;
cin>>d>>k;
dp[1][0] = 1; //각각 a, b 의 개수 의미
dp[1][1] = 0;
dp[2][0] = 0;
dp[2][1] = 1;
for (int i = 3; i <=d ;i++)
{
dp[i][0] = dp[i-1][0] + dp[i-2][0];
dp[i][1] = dp[i-1][1] + dp[i-2][1];
}
//cout << dp[d][0] << " " << dp[d][1] << "\n";
for (int i = 1; i * dp[d][0] < k; i++ )
{
if ( (k - (i*dp[d][0]))%dp[d][1] == 0 )
{
cout<< i << "\n";
cout<<(k - (i*dp[d][0]))/dp[d][1] <<"\n";
return 0;
}
}
return 0;
}
'코딩 공부 연습' 카테고리의 다른 글
백준 2410 2의 멱수의 합 (0) | 2023.02.24 |
---|---|
백준 1967 트리의 지름 (1) | 2023.02.24 |
백준 4883 삼각 그래프 (0) | 2023.02.20 |
백준 10942 팰린드롬? (0) | 2023.02.18 |
백준 10826 피보나치 수 4 (0) | 2023.02.14 |