Algorithm/๋ฌธ์ œํ’€์ด

[๋ฐฑ์ค€] 1904๋ฒˆ - 01ํƒ€์ผ (C++)

moaoh 2023. 8. 12. 23:24

 

 

1904๋ฒˆ: 01ํƒ€์ผ

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

www.acmicpc.net

 

 

 

๋ฌธ์ œ

์ง€์›์ด์—๊ฒŒ 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์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

ํ’€์ด๊ณผ์ •

N ๊ฐ€์ง€ ์ˆ˜  ์ถœ๋ ฅ ๊ฐ’
1  1 1
2 00 11 2
3 001 100 111 3
4 0011 1100 1111 0000 1001
5
5 00001 00111 11111 10000 11100 10011 11001 00100
8

์œ„์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋“ค์„ ๊ณ„์† ๊ณ„์‚ฐ์„ ํ•ด๋ณด๊ณ  ์ถœ๋ ฅ๊ฐ’์„ ๋ณด๋‹ค๋ณด๋‹ˆ ํ”ผ๋ณด๋‚˜์น˜์ˆ˜์—ด๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์„œ

ํ”ผ๋ณด๋‚˜์น˜ ๋ฌธ์ œํ’€๋“ฏ์ด ์ง„ํ–‰์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

code

#include <iostream>

int		t[1000001];

int		dp(int n)
{
	if (n == 1) return (1);
	if (n == 2) return (2);
	if (n == 3) return (3);
	if (!t[n]) return (t[n]);
	return (t[n] = ((dp(n - 1) + dp(n - 2)) % 15746));
}

int		main(void)
{
	int		n;
	std::cin >> n;
	std::cout << (dp(n)) << "\n";

	return (0);
}

 

ํ›„๊ธฐ

๋จธ๋ฆฌ๋กœ๋Š” ์ดํ•ด๊ฐ€๋˜์ง€๋งŒ ์–ด๋–ป๊ฒŒ ์ ํ™”์‹์„ ์„ธ์›Œ์•ผํ• ์ง€ ์€๊ทผ ๊ณ ๋ฏผ์„ ๋งŽ์ดํ–ˆ๋˜ ๋ฌธ์ œ์˜€๋˜ ๊ฑฐ ๊ฐ™๋‹ค.

์ˆ˜ํ•™์ ์ธ ๊ฐœ๋…์„ ์กฐ๊ธˆ ๋” ๊ณต๋ถ€๋ฅผ ๋งŽ์ดํ•ด์•ผํ•  ๊ฑฐ ๊ฐ™๋‹ค.

๋Œ“๊ธ€์ˆ˜0