https://programmers.co.kr/learn/courses/30/lessons/12914#
풀이법
1) DP를 활용하면 쉽게 풀 수 있는 문제이다. (queue를 활용하여 풀 수 있으나 시간 초과에 유의해야 한다.)
2) 개인적으로 kakao 프로그래머스 level2 문제보다 쉽다고 생각했기에, 오래 걸리지 않고 문제를 풀 수 있었다.
arr[1]=1
arr[2]=2
arr[3]=3
arr[4]=5
arr[5]=8
등의 규칙이 존재했기에 점화식을 arr[i]=arr[i-1]+arr[i-2]로 세울 수 있었다.
수가 커지게 되면, overflow가 발생할 수 있으므로 long long type을 사용하면 쉽게 해결 가능하다
#include <string>
#include <vector>
#include <queue>
using namespace std;
long long solution(int n) {
long long answer = 0;
queue<int> q;
long long arr[2001];
arr[1]=1;
arr[2]=2;
for(int i=3;i<=n;i++)
{
arr[i]=(arr[i-1]+arr[i-2])%1234567;
}
answer=arr[n];
return answer;
}
/*
long long solution(int n) {
long long answer = 0;
queue<int> q;
q.push(0);
n=6;
while(!q.empty())
{
int now=q.front();
q.pop();
if(now==n)
{
answer++;
continue;
}
if(now+1<=n)
q.push(now+1);
if(now+2<=n)
q.push(now+2);
}
return answer%1234567;
}*/
'Coding_Test_C++' 카테고리의 다른 글
BaekJoon 1620번: 나는야 포켓몬 마스터 이다솜(C++) (0) | 2021.07.04 |
---|---|
BaekJoon 2096번: 내려가기(C++) (0) | 2021.07.03 |
Programmers Level2: 메뉴 리뉴얼 (0) | 2021.07.02 |
Programmers Level 2: 뉴스 클러스터링(C++) (0) | 2021.07.01 |
Programmers Level 2: 카카오프렌즈 컬러링 북 (0) | 2021.07.01 |