๐Ÿ•๏ธ ICPC Sinchon/Dynamic Programming

[BOJ][C++] ๋ฐฑ์ค€ 1904๋ฒˆ: 01ํƒ€์ผ

์„ ๋‹ฌ 2024. 8. 25. 05:43
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/1904

 

๋ฌธ์ œ

์ง€์›์ด์—๊ฒŒ 2์ง„ ์ˆ˜์—ด์„ ๊ฐ€๋ฅด์ณ ์ฃผ๊ธฐ ์œ„ํ•ด, ์ง€์›์ด ์•„๋ฒ„์ง€๋Š” ๊ทธ์—๊ฒŒ ํƒ€์ผ๋“ค์„ ์„ ๋ฌผํ•ด์ฃผ์…จ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๊ฐ๊ฐ์˜ ํƒ€์ผ๋“ค์€ 0 ๋˜๋Š” 1์ด ์“ฐ์—ฌ ์žˆ๋Š” ๋‚ฑ์žฅ์˜ ํƒ€์ผ๋“ค์ด๋‹ค.

์–ด๋Š ๋‚  ์ง“๊ถ‚์€ ๋™์ฃผ๊ฐ€ ์ง€์›์ด์˜ ๊ณต๋ถ€๋ฅผ ๋ฐฉํ•ดํ•˜๊ธฐ ์œ„ํ•ด 0์ด ์“ฐ์—ฌ์ง„ ๋‚ฑ์žฅ์˜ ํƒ€์ผ๋“ค์„ ๋ถ™์—ฌ์„œ ํ•œ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ 00 ํƒ€์ผ๋“ค์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ฒฐ๊ตญ ํ˜„์žฌ 1 ํ•˜๋‚˜๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํƒ€์ผ ๋˜๋Š” 0ํƒ€์ผ์„ ๋‘ ๊ฐœ ๋ถ™์ธ ํ•œ ์Œ์˜ 00ํƒ€์ผ๋“ค๋งŒ์ด ๋‚จ๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ง€์›์ด๋Š” ํƒ€์ผ๋กœ ๋” ์ด์ƒ ํฌ๊ธฐ๊ฐ€ N์ธ ๋ชจ๋“  2์ง„ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, N=1์ผ ๋•Œ 1๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , N=2์ผ ๋•Œ๋Š” 00, 11์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. (01, 10์€ ๋งŒ๋“ค ์ˆ˜ ์—†๊ฒŒ ๋˜์—ˆ๋‹ค.) ๋˜ํ•œ N=4์ผ ๋•Œ๋Š” 0011, 0000, 1001, 1100, 1111 ๋“ฑ ์ด 5๊ฐœ์˜ 2์ง„ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์ง€์›์ด๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ€์ง“์ˆ˜๋ฅผ ์„ธ๋Š” ๊ฒƒ์ด๋‹ค. ๋‹จ ํƒ€์ผ๋“ค์€ ๋ฌดํ•œํžˆ ๋งŽ์€ ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•˜์ž.

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000,000)

์ถœ๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ์ง€์›์ด๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด๊ฐ€ N์ธ ๋ชจ๋“  2์ง„ ์ˆ˜์—ด์˜ ๊ฐœ์ˆ˜๋ฅผ 15746์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

์ „ํ˜•์ ์ธ dp ๋ฌธ์ œ

// ํ’€์ด : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>

using namespace std;

const int NUMBER = 15746;

int main() {
    int n;
    cin >> n;
    
    vector<int>dp(n+1);
    dp[1] = 1;
    dp[2] = 2;
    for(int i=3; i<=n; i++) {
        dp[i] = (dp[i-1] + dp[i-2])%NUMBER;
    }
    
    cout << dp[n];
    
    
    return 0;
}
๋ฐ˜์‘ํ˜•