๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90
๐Ÿ”—๋ฌธ์ œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ
 

1309๋ฒˆ: ๋™๋ฌผ์›

์ฒซ์งธ ์ค„์— ์šฐ๋ฆฌ์˜ ํฌ๊ธฐ N(1≤N≤100,000)์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

๐Ÿง‘๐Ÿป‍๐Ÿ’ปํ’€์ด ๊ณผ์ •

Dynamic Programming ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. \( n = 1\), \( n = 2\), ... ์ผ ๋•Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ์ ๊ฒ€ํ•ด๋ณด๋ฉด, ํŒจํ„ด์ด ๋ณด์ด๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/*
	- ์–ด๋–ค ํ•œ ํ–‰์— ์žˆ์–ด์„œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐ€์ง€
	[][], [o][], [][o]
*/

        [][]	[o][]	[][o]
n = 1 :  1        1       1
n = 2 :  3        2       2
n = 3 :  7        5       5
n = 4 : 17       12      12
...
  • [ ][ ]์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” n - 1๋ฒˆ์งธ์˜ [ ][ ] + [o][ ] + [ ][o] ๊ฐ’์ž…๋‹ˆ๋‹ค.
  • [o][ ]๊ณผ [ ][o]์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” n - 1๋ฒˆ์งธ์˜ [ ][ ] + [o][ ] (๋˜๋Š” [ ][o]) ๊ฐ’์ž…๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ, n๋ฒˆ์งธ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” n๋ฒˆ์งธ์˜ [ ][ ] + [o][ ] + [ ][o] ๊ฐ’์ž…๋‹ˆ๋‹ค.

 

โœ๏ธ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ฒฐ๊ณผ

#include <iostream>
#include <vector>
using namespace std;
const int DIVISOR = 9901;

int main()
{
	ios::sync_with_stdio(false);
	cout.tie(NULL); cin.tie(NULL);

	int N;
	cin >> N;

	int nothing = 1, existOne = 1;
	for (int i = 1; i < N; i++)
	{
		int temp = existOne;
		existOne = (existOne + nothing) % DIVISOR;
		nothing = (nothing + temp * 2) % DIVISOR;
	}

	cout << (nothing + existOne * 2) % DIVISOR;
	return 0;
}

 

728x90
๋ฐ˜์‘ํ˜•