728x90
N๋จ์ ๊ณ๋จ์ด ์๊ณ , ํ๋ฒ์ ๊ณ๋จ์ ํ ๋จ ๋๋ ๋ ๋จ์ ์ฌ๋ผ๊ฐ ์ ์๋ค๊ณ ํ์.
์ต๋ ๋ ๊ตฐ๋ฐ์ ๊ณ๋จ์๋ ์ฅ์ ๋ฌผ์ด ์์ด์ ์ฌ๋ผ๊ฐ ์ ์๋ค.
์ด ๋ N๋จ๊น์ง ์ฌ๋ผ๊ฐ๋ ์๋ก ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
ํ์ค์ ๋ ฅ์ผ๋ก ์ธ ์ ์ N A B๊ฐ ์ฃผ์ด์ง๋ค. N์ ๊ณ๋จ์ ๋จ์๋ก, 1 ์ด์ 30 ์ดํ์ด๋ค.
A์ B๋ ์ฅ์ ๋ฌผ์ด ์๋ ๊ณ๋จ์ ์์น์ด๋ค. A์ B๋ 0 ์ด์ N ์ดํ์ธ ์์ด๋ฉฐ, A์ B๊ฐ ๊ฐ์ ์ ์๋ค.
A, B ๊ฐ์ด 0์ด๋ผ๋ฉด, ์ด๋ ์ฅ์ ๋ฌผ์ด ์๋ค๋ ๋ป์ด๋ค. ์๋ฅผ ๋ค์ด N, A, B๊ฐ 3, 0, 1์ด๋ผ๊ณ ์ฃผ์ด์ง๋ฉด
์ด 3๋จ์ ๊ณ๋จ์ด ์๊ณ , ์ฅ์ ๋ฌผ์ 1๋จ์๋ง ์๋ค. ์กฐ๊ธ ๋ ์๊ฐํด๋ณด๋ฉด N, A, B๊ฐ 3, 1, 0์ผ๋ก ์ฃผ์ด์ ธ๋
๊ฐ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ถ๋ ฅ
ํ์ค์ถ๋ ฅ์ผ๋ก ํ๋์ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. N๋จ๊น์ง ์ค๋ ์๋ก ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์์ด๋ค.
ํํธ
๋ง์ฝ 1๋จ, 2๋จ์ ์ฌ๋ผ๊ฐ ์ ์๋ค๋ฉด, 1๋จ์ ์ฌ๋ผ๊ฐ๋ ๋ฐฉ๋ฒ์ ํ ๊ฐ์ง, 2๋จ์ ์ฌ๋ผ๊ฐ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง์ด๋ค.
์์ ์ ๋ ฅ 1
3 0 1
์์ ์ถ๋ ฅ 1
1
์๊ณ ๋ฆฌ์ฆ ์์ ๋ ๋ฒ์งธ ๊ณผ์ ๋ DP๋ฅผ ์ด์ฉํ ๋ฏธ์ ์ด์๋ค!
ํํ ํฉํ ๋ฆฌ์ผ ๊ณ์ฐ์ผ๋ก ๋ฐฐ์ฐ๊ฒ ๋๋ dp๋ dynamic programming์ ์ฝ์๋ก,
ํ์ฌ์ ๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํด ์ด์ ์ ์ ์ฅํด๋จ๋ ๊ฐ์ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ํน์ง์ด๋ค.
์๋๋ ๋ง์ ๋ฐ์ ๋ด ์ฝ๋์ด๋ค ๐ฅ
#include <iostream>
#include <vector>
using namespace std;
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int cnt=0;
int n, a, b;
cin >> n >> a >> b;
vector<int> stair(n+1);
stair[0] = 0;
stair[1] = 1; // 1์ธต
stair[2] = 2;
if((a == 1 && b == 2) || (a == 2 && b == 1)){
stair[1] = 0;
stair[2] = 0;
} else if(a == 1 || b == 1){
stair[1] = 0;
stair[2] = 1;
} else if(a == 2 || b == 2){
stair[1] = 1;
stair[2] = 0;
}
for(int i=3; i<=n; ++i){
if(i==a || i==b) {
stair[i] = 0;
continue;
}
stair[i] = stair[i - 1] + stair[i - 2];
}
cout << stair[n];
return 0;
}
๋ฐฑ์ค์๋ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ผ๋ ๊ทธ๊ฒ๋ ํ์ด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
https://www.acmicpc.net/problem/2579
728x90
'๐ ์ ๊ณต ๊ณต๋ถ > ์๊ณ ๋ฆฌ์ฆ ํด์ ๋ฐ ์ค๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ์คํจ ํจ์ - ์ค๋ณต ์ต๋ ๋ถ๋ถ๋ฌธ์์ด(cpp) (0) | 2023.04.11 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๋ฌธ์์ด ๋ค๋ฃจ๊ธฐ - ๋ก๋ง์ซ์(cpp) (0) | 2023.04.11 |
[์๊ณ ๋ฆฌ์ฆ] Greedy algorithm - ์ด์งํธ ๋๋์ (cpp) (0) | 2023.02.09 |
[์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ์ ์ต์ ์ฑ (0) | 2023.01.16 |
[์๊ณ ๋ฆฌ์ฆ] ๋น๊ต๊ธฐ๋ฐ ์ ๋ ฌ์ ํ๊ณ/๋น๊ต์ ๊ธฐ๋ฐํ์ง ์์ ์ ๋ ฌ (0) | 2023.01.16 |