์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ์์ํ์
- ๋๋น์ฐ์ ํ์
- DP
- ํ๋ก๊ทธ๋๋จธ์ค
- ๊ทธ๋ํํ์
- ๊น์ด์ฐ์ ํ์
- ๋์ ๊ณํ๋ฒ
- DFS
- ์ฐ์ ์์ํ
- ๋์ ํฉ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์๊ณ ๋ฆฌ์ฆ
- LIS
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ๋จธ์ง์ํธ
- ์ ๋ ฌ
- ๊ทธ๋ฆฌ๋
- ๋ฐฑ์ค
- ๊ทธ๋ํ
- ๋ณํฉ์ ๋ ฌ
- SQL
- ์ค๋ธ์
- db
- ํ์ด์ฌ
- skala
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- ๊ตฌํ
- ์ํ
- BFS
- skala1๊ธฐ
- Today
- Total
๐๐ญ๐ฐ๐ธ ๐ฃ๐ถ๐ต ๐ด๐ต๐ฆ๐ข๐ฅ๐บ
[๋ฐฑ์ค] 1788๋ฒ: ํผ๋ณด๋์น ์์ ํ์ฅ - C++ ๋ณธ๋ฌธ
[๋ฐฑ์ค] 1788๋ฒ: ํผ๋ณด๋์น ์์ ํ์ฅ - C++
.23 2022. 2. 21. 17:17๋ฌธ์

์ํ์์, ํผ๋ณด๋์น ์๋ ์์ ์ ํ์๊ณผ ๊ฐ์ด ๊ท๋ฉ์ ์ผ๋ก ์ ์๋๋ ์์ด์ด๋ค. ์์ ์์์๋ ์ ์ ์๋ฏ์ด, ํผ๋ณด๋์น ์ F(n)์ 0 ์ด์์ n์ ๋ํด์๋ง ์ ์๋๋ค.
ํ์ง๋ง ํผ๋ณด๋์น ์ F(n)์ n์ด ์์์ธ ๊ฒฝ์ฐ๋ก๋ ํ์ฅ์ํฌ ์ ์๋ค. ์์ ์์์ n > 1์ธ ๊ฒฝ์ฐ์๋ง ์ฑ๋ฆฝํ๋ F(n) = F(n-1) + F(n-2)๋ฅผ n ≤ 1์ผ ๋๋ ์ฑ๋ฆฝ๋๋๋ก ์ ์ํ๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด n = 1์ผ ๋ F(1) = F(0) + F(-1)์ด ์ฑ๋ฆฝ๋์ด์ผ ํ๋ฏ๋ก, F(-1)์ 1์ด ๋์ด์ผ ํ๋ค.
n์ด ์ฃผ์ด์ก์ ๋, ํผ๋ณด๋์น ์ F(n)์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. n์ ์์๋ก ์ฃผ์ด์ง ์๋ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ n์ด ์ฃผ์ด์ง๋ค. n์ ์ ๋๊ฐ์ด 1,000,000์ ๋์ง ์๋ ์ ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ F(n)์ด ์์์ด๋ฉด 1, 0์ด๋ฉด 0, ์์์ด๋ฉด -1์ ์ถ๋ ฅํ๋ค. ๋์งธ ์ค์๋ F(n)์ ์ ๋๊ฐ์ ์ถ๋ ฅํ๋ค. ์ด ์๊ฐ ์ถฉ๋ถํ ์ปค์ง ์ ์์ผ๋ฏ๋ก, ์ ๋๊ฐ์ 1,000,000,000์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
๋์ ๊ณํ๋ฒ์ผ๋ก ํ์๋ ๋ฌธ์ .
์์๋ผ ๋นํฉํ๋๋ฐ, F(0)๋ถํฐ F(-5), F(-6)๊น์ง ๋์ดํ๋ค๋ณด๋ ๊ท์น์ด ๋ณด์๋ค.
F(i) = F(i - 1) + F(i - 2) ์ผ ๋, ์์ ์ฎ๊ฒจ์ ํํํ๋ฉด F(i - 2) = F(i) - F(i - 1)์ด๋ฏ๋ก,
F(-1) = F(1) - F(0) = 1
F(-2) = F(0) - F(-1) = -1
F(-3) = F(-1) - F(-2) = 2
F(-4) = F(-2) - F(-3) = -3
F(-5) = F(-3) - F(-4) = 5
...
๋ณด๋ค๋ณด๋ฉด N์ ์ ๋๊ฐ์ด ์ง์์ผ ๋๋ง ์์๊ฐ ๋์ค๊ณ , ํ์์ธ ๊ฒฝ์ฐ ๊ธฐ์กด์ ํผ๋ณด๋์น์์ด๊ณผ ๋์ผํ๊ฒ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ฐ๋ผ์ N์ด ์์์ผ ๊ฒฝ์ฐ ์์ ๊ฐ์ ์ผ์ด์ค๋ฅผ ๊ณ ๋ คํ์ฌ ์์๋ก ๋ฐ๊ฟ์ค ๋ค ๋์ผํ๊ฒ ํ์ด์ฃผ๋ฉด ๋๋ค.
์ฝ๋
#include <cstdio>
#define MOD 1000000000
#define MAX 1000001
long long DP(int num);
int main(void) {
int n, flag = 1;
scanf("%d", &n);
if(n < 0) {
n *= -1;
if(n % 2 == 0) flag = -1;
}
if(n == 0) flag = 0;
printf("%d\n%lld\n", flag, DP(n));
return 0;
}
long long DP(int num) {
long long arr[MAX];
arr[0] = 0;
arr[1] = 1;
for(int i = 2; i <= num; i++) {
arr[i] = (arr[i - 1] + arr[i - 2]) % MOD;
}
return arr[num] % MOD;
}
'์ฝ๋ฉํ ์คํธ ์ค๋น > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1149๋ฒ: RGB๊ฑฐ๋ฆฌ - C++ (0) | 2022.07.04 |
---|---|
[๋ฐฑ์ค] 1024๋ฒ: ์์ด์ ํฉ - C++ (0) | 2022.02.23 |
[๋ฐฑ์ค] 3085๋ฒ: ์ฌํ ๊ฒ์ - C++ (0) | 2022.02.18 |
[๋ฐฑ์ค] 1966๋ฒ: ํ๋ฆฐํฐ ํ - C++ (0) | 2022.02.17 |
[๋ฐฑ์ค] 14501๋ฒ: ํด์ฌ - C++ (0) | 2022.02.15 |