

아무래도 피보나치 자체가 이전에 했던 계산들을 반복해서 사용하는 패턴이다보니까
문제에서 요구하는 0이랑 1 개수도 패턴이 있을거같아서
이거 먼저 정리해봤음.
| 숫자 | 0 횟수 | 1 횟수 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
0이랑 1은 우선 정리하고 시작하고, 여기서부터 시작했을 때

이렇게 되니까
| 숫자 | 0 횟수 | 1 횟수 | |
| 0 | 1 | 0 | |
| 1 | 0 | 1 | |
| 2 | 1 | 1 | 2 -> 1,0 |
| 3 | 1 | 2 | 3 -> 2(1,0) , 1 |
| 4 | 2 | 3 | 4 -> 3( 2(1,0) , 1), 2(1,0) |
| 5 | 3 | 5 | 5-> 4( 3( 2(1,0) , 1), 2(1,0) ), 3( 2(1,0) , 1) |
2는 1과 0의 0,1횟수를 더한거,
3은 2와 1의 0,1횟수를 더한거
4는 3+2, 5는 4+3 이런식이다.
이걸 활용해서 풀어보면 될거같다.
#include <iostream>
#include <vector>
using namespace std;
int main(){
int T, n;
cin >> T;
vector<vector<int>>v(41,vector<int>(2));
v[0] = {1, 0}, v[1] = {0, 1};
for(int i = 2; i<41; ++i){
v[i][0] = v[i-1][0] + v[i-2][0];
v[i][1] = v[i-1][1] + v[i-2][1];
}
while(T--){
cin >> n;
cout << v[n][0] << " " << v[n][1] << endl;
}
}
n이 40까지라고 제한을 줬으니까
0~40까지 미리 구해놓고 하면 편하다!
원샷 원킬!
'C++ 문제풀기 > 백준-프로그래머스' 카테고리의 다른 글
| 프로그래머스 | 숫자의 표현 (0) | 2025.10.04 |
|---|---|
| 프로그래머스 | 피보나치 수 (0) | 2025.10.04 |
| 프로그래머스 | 공원산책 (0) | 2025.09.17 |
| 프로그래머스 | 타겟넘버 (0) | 2025.09.15 |
| 프로그래머스 | 주식가격 (1) | 2025.09.13 |