๋ฐฑ์ค€ 2011 ํŒŒ์ด์ฌ

2021. 7. 31. 11:38ใ†Python

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

 

2011๋ฒˆ: ์•”ํ˜ธ์ฝ”๋“œ

๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ํ•ด์„์˜ ๊ฐ€์ง“์ˆ˜๋ฅผ ๊ตฌํ•˜์‹œ์˜ค. ์ •๋‹ต์ด ๋งค์šฐ ํด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, 1000000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์•”ํ˜ธ๊ฐ€ ์ž˜๋ชป๋˜์–ด ์•”ํ˜ธ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

2011๋ฒˆ์€ Dynamic Programming ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

DP ๋ฌธ์ œ๋Š” ํ•œ ๋ฒˆ ์ƒ๊ฐ์ด ์•ˆ ๋‚˜๋ฉด ์•„๋ฌด๋ฆฌ ์‹์„ ๊ธธ๊ฒŒ ์“ฐ๋ฉด์„œ ๋…ธ๊ฐ€๋‹ค๋ฅผ ํ•ด๋ณด๊ณ  ๊ทœ์น™์„ ์ฐพ์œผ๋ ค๊ณ  ํ•ด๋„ ์ž˜๋ชป ์ฐพ๊ฒŒ ๋˜๊ฑฐ๋‚˜, ์•„์˜ˆ ๋ชป ์ฐพ๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋ฌผ๋ก  ์ € ํ•œ์ •). DP ๋ฌธ์ œ๋ฅผ ๋” ํ’€์–ด๋ณด๊ณ , ์˜ˆ์ „์— ํ’€์—ˆ๋˜ ๊ฒƒ๋“ค๋„ ๋‹ค์‹œ ํ’€์–ด๋ณด๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ด๋ฉด์„œ ์ข€ ๋” ๋น ๋ฅด๊ฒŒ ๊ทœ์น™์„ ์ฐพ๊ณ  ์‹์„ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์•„์ง์€ ๊ทธ๋Ÿฐ ๊ฒฝ์ง€์—๋Š” ๋‹ค๋‹ค๋ฅด์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

2011๋ฒˆ์€ ์•„์˜ˆ ์‹์„ ์ž˜๋ชป ์ƒ๊ฐํ•ด์„œ ์ถœ๋ฐœํ–ˆ๋”๋‹ˆ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์ฝ”๋“œ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š” ๊ฑธ ๊นจ๋‹ซ๊ณ  ํ˜ผ์ž์„œ ์”จ๋ฆ„ํ•˜๋‹ค๊ฐ€ ๊ตฌ๊ธ€๋ง + ๋ฐฑ์ค€ ์งˆ๋ฌธ๋“ค์„ ํ†ตํ•ด์„œ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ์„ ๋ณด๋‹ค ๋ณด๋ฉด ์•„์‹œ๊ฒ ์ง€๋งŒ 2๋…„ ์ „์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋น ์ง€๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋˜์–ด ์˜ˆ์ „ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…์„ ๋ณด๋ฉด '??์ด๊ฒŒ ํฌํ•จ๋œ๋‹ค๊ณ ..?'์‹ถ์€ ์˜ˆ์ œ๋“ค์ด๋‚˜ ์˜ˆ์™ธ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค! ์ตœ๊ทผ ๋ธ”๋กœ๊ทธ๋“ค์„ ์ฐธ๊ณ ํ•˜๋Š” ๊ฒŒ ์ •๋‹ต์ผ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

2011๋ฒˆ์€ ์ ํ™”์‹์„ ์ฐพ๋Š” ๊ณผ์ •์ด ์กฐ๊ธˆ ์ƒ์†Œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ‘์— ์†๊ทธ๋ฆผ๊ณผ ์„ค๋ช…์„ ๋‚จ๊ฒจ๋‘๊ฒ ์ง€๋งŒ, ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์œผ์‹ ๋‹ค๋ฉด ์ฐจ๋ผ๋ฆฌ ๊ฐ€์žฅ ํ•˜๋‹จ์— ์ฝ”๋“œ๋ฅผ ๋จผ์ € ๋ณด๊ณ  ๋‹ค์‹œ ์†๊ทธ๋ฆผ๊ณผ ์„ค๋ช…์„ ์ฝ๋Š” ๋ฐฉ์‹์ด ์กฐ๊ธˆ ๋” ์ˆ˜์›”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์šฐ์„  2011๋ฒˆ ์˜ˆ์‹œ์—๋Š” 25114๋ฅผ ์ž…๋ ฅํ–ˆ๋”๋‹ˆ 6์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

 

์ผ๋‹จ 25114์—์„œ 6์ด ๋‚˜์˜ค๊ฒŒ ๋œ ๊ณผ์ •์„ ์ง๊ด€์ ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด, 

2/5/1/1/4

25/1/1/4

25/11/4

25/1/14

2/5/11/4

2/5/1/14

 

์ด๋ ‡๊ฒŒ ์—ฌ์„ฏ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์—ฌ์„ฏ๊ฐ€์ง€๋ฅผ ์ง์ ‘ ์ฐพ์•„๋ณด๋ฉด ์šฐ์„  i๋ฒˆ์งธ ์ธ๋ฑ์Šค์ผ๋•Œ i-1๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ 10์˜ ์ž๋ฆฌ์ˆ˜๋กœ ๋‘˜ ์ˆ˜ ์žˆ๋Š๋ƒ ์—†๋Š๋ƒ์— ๋”ฐ๋ผ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ๊นŒ์ง€๋Š” ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋” ํ’€์–ด์„œ ์„ค๋ช…ํ•˜์ž๋ฉด, ์•ž์„œ 2๋ฒˆ์งธ ์ธ๋ฑ์Šค(5)์—์„œ 1๋ฒˆ์งธ ์ธ๋ฑ์Šค(2)๋ฅผ ์ฐธ๊ณ ํ–ˆ์„๋•Œ, 10์˜ ์ž๋ฆฌ์ˆ˜๋ฅผ 2๋ผ๊ณ  ๋‘๊ณ  5์™€ ํ•ฉ์น˜๋ฉด 25๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. 25๋Š” ์•”ํ˜ธํ™” ํ•˜๋Š” ๋ฒ”์œ„(1~26)์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— 2,5๋กœ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ํ†ต์œผ๋กœ 25๋กœ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 2๊ฐœ ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ 3๋ฒˆ์žฌ ์ธ๋ฑ์Šค์ธ 1์—์„œ๋Š” ์–˜๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. 2๋ฒˆ์งธ ์ธ๋ฑ์Šค ๊ฐ’์ด 5์ด๋ฏ€๋กœ ๋งŒ์•ฝ 5๊ฐ€ ์‹ญ์˜ ์ž๋ฆฌ์ˆ˜๋กœ ์˜ค๊ฒŒ ๋œ๋‹ค๋ฉด 51์ด ๋˜๋Š”๋ฐ, ์ด๋Š” ๋ฒ”์œ„์— ์–ด๊ธ‹๋‚˜๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์˜ค์ง 5/1๋กœ ํ‘œํ˜„ํ•˜๊ฒŒ ๋˜์–ด ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 1๊ฐœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ dp ์‹์„ ์–ด๋–ป๊ฒŒ ์„ธ์›Œ์•ผ ํ•  ์ง€ ๊ณ ๋ฏผ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•˜๋Š๋ƒ ๋น™๋น™ ๋‘˜๋Ÿฌ ๊ฐ€๋Š๋ƒ์˜ ์ฐจ์ด๊ฐ€ ์ƒ๊ธธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ด์ œ๋Š” ์†์œผ๋กœ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์„ ์ฒจ๋ถ€ํ•˜๋ฉฐ ์„ค๋ช…์„ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋ถ€ํ„ฐ

ํ•„๊ธฐํ•˜๋Š” ๋ชจ์Šต์„ GIF๋กœ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์ค‘๊ฐ„์ค‘๊ฐ„์— ํ™”๋ฉด ๋…นํ™”๊ฐ€ ์ข€ ์ž˜๋ ค์„œ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๋ถ€ํ„ฐ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฑธ๋กœ ๋ฐ”๋กœ ์ดํ•ด๊ฐ€ ๋œ๋‹ค๊ณ  ํ•˜์‹œ๋ฉด ๊ทธ๋ƒฅ ๋ฐ”๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๊ฐ€์žฅ ์ฒ˜์Œ dp์˜ ์ดˆ๊ธฐ๊ฐ’๋“ค์€ 0์ด๋ผ๊ณ  ํ•ฉ์‹œ๋‹ค. dp = [0,0,0,0,0] ์ด๋•Œ ์ธ๋ฑ์Šค ์‹œ์ž‘์ด 0์ด ์•„๋‹ˆ๋ผ 1์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. 

 

1. 2์ผ๋•Œ 2๋งŒ ๋˜๋ฏ€๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1๊ฐœ ์ž…๋‹ˆ๋‹ค. dp[1] = 1

 

2. 5์ผ๋•Œ๋Š” ์ž…๋ ฅ ๊ฐ’์ด 25๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด 2,5 ๊ทธ๋ฆฌ๊ณ  25 ์ด๋ ‡๊ฒŒ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๊ฐ๊ฐ 1๊ฐœ ์”ฉ ๋‚˜์˜ต๋‹ˆ๋‹ค. ์ตœ์ข… ํ•ฉ์€ dp[2] = 2

 

3. ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ทธ๋Ÿด๋•Œ๋Š” ์ง์ ‘ ์†์œผ๋กœ ์จ์„œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์„ธ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค. 251์ผ๋•Œ๋Š” 51์ด ๋‚˜์˜ฌ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•ž์„œ dp[2] = 2์—์„œ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. 2/5/1 ๊ทธ๋ฆฌ๊ณ  25/1 ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฆ‰, dp[3] += dp[2] -> dp[3] = 2

 

4. ๊ทธ๋ฆฌ๊ณ  2511์ผ๋•Œ๋Š” 1/1, 11์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 2๊ฐ€์ง€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 

 

ํŽœ ๊ตต๊ธฐ๋‚˜ ์ƒ‰์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ์ฐฝ์„ ์—ด์—ˆ๋‹ค ๋‹ซ์•˜๋‹ค ํ•ด์„œ gif ๊ฐ€๋…์„ฑ์ด ์กฐ๊ธˆ ๋–จ์–ด์ง€๋„ค์š” ใ… ใ…  

์—ฌ๊ธฐ์„œ ์ด์ œ 1์ผ๋•Œ 11์ผ๋•Œ, ๊ฐ๊ฐ dp[3]์˜ ๊ฐ’๊ณผ dp[2]์˜ ๊ฐ’์„ ํ™”์‚ดํ‘œ๋กœ ๋Œ์–ด๋‹ค๊ฐ€ ํ•ฉํ–ˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1์ผ๋•Œ๋Š” ์•ž์— 2,5,1์„ ์ด์šฉํ•œ ์ˆ˜์˜ ์กฐํ•ฉ์— 1์„ ๋ง๋ถ™์ธ ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. dp[3] = 2์˜€๋Š”๋ฐ, 2/5/1/1 ์ด๊ฑฐ๋‚˜ 25/1/1 ์ผ ์ˆ˜ ๋ฐ–์— ์—†๊ธฐ์— dp ๊ฐ’์ด ๋ณ€ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์ฆ‰, dp[4] += dp[3]์ผ ์ˆ˜ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. 

 

11์ผ๋•Œ๋Š” ๋™์ผํ•œ ์›๋ฆฌ์ด์ง€๋งŒ, 2,5,1,1์—์„œ 1,1๋ฅผ ๋บ€, ์ฆ‰ dp[2]์˜ ๊ฐ’์„ ๋”ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. 2/5/11์ด๊ฑฐ๋‚˜ 25/11์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, dp[4] += dp[2]๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. 

 

5. ๋งˆ์ง€๋ง‰, 4์ผ๋•Œ, 25114์ผ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค. dp[5] += dp[3], dp[5] += dp[4] 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ ์ ํ™”์‹์„ ๋งŒ๋“ค๊ณ  ๊ฒฐ๋ก ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฆ‰, 1์˜ ์ž๋ฆฌ ์ˆ˜๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด dp[i] += dp[i-1],

๊ทธ ์ „ ์ธ๋ฑ์Šค ๊ฐ’์„ 10์˜ ์ž๋ฆฌ์ˆ˜๋กœ ํฌํ•จํ•ด์„œ ๊ทธ๊ฒŒ ๋ฒ”์œ„(10~26)์— ๋“ค์–ด๊ฐ„๋‹ค๋ฉด dp[i] += dp[i-2]

 

๊ทธ๋Ÿฐ๋ฐ ๋˜ ์•ž์„œ ๋ณธ ๋‘ ๋ฒˆ์งธ ์ธ๋ฑ์Šค, 5์ผ๋•Œ๊ฐ€ ๊ทธ๋Ÿผ ๋…ผ๋ฆฌ์— ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค. dp[2] += dp[1], dp[2] += dp[0]์ด ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ dp[0]์ด ์—†์ฃ . ์ฆ‰, dp์˜ ๊ธธ์ด๊ฐ€ ์ž…๋ ฅ๊ฐ’์˜ ๊ธธ์ด๋ณด๋‹ค 1๊ฐœ ๋” ๊ธธ์–ด์•ผ ํ•˜๊ณ , dp[0]์˜ ๊ฐ’์—๋Š” 1์ด ๋””ํดํŠธ๋กœ ๋“ค์–ด๊ฐ€์žˆ์–ด์•ผ ๋…ผ๋ฆฌ๊ฐ€ ๋งž์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ๊ฑฐ๊ธฐ์— ๋งž์ถฐ์„œ ์ž…๋ ฅ๊ฐ’ code์—๋„ ์ฒ˜์Œ์— code[0] = 0์ด๋ผ๋Š” ์˜๋ฏธ์—†๋Š” ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์–ด ์ธ๋ฑ์Šค๋ฅผ ๋งž์ถฐ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด dp ๊ณ„์‚ฐ ๋กœ์ง ์‹์„ ์ด๋ ‡๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

length = len(code) #์ž…๋ ฅ๋ฐ›์€ ์•”ํ˜ธ ์ˆซ์ž๊ฐ€ code
dp = [0] * length
dp[0] = dp[1] = 1 #dp[0] = 1 ๋””ํดํŠธ๊ฐ’, dp[1]์€ ์˜ˆ์‹œ 25114์—์„œ 2์—๋งŒ ํ•ด๋‹นํ•˜๋ฏ€๋กœ ๋ฌด์กฐ๊ฑด 1์ด ๋จ.

for i in range(2, length):
    first = int(code[i]) #ํ•œ์ž๋ฆฌ ์ˆ˜
    tenth = int(code[i-1])*10 + int(code[i])#๊ทธ ์ „ ์ธ๋ฑ์Šค๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๋‘ ์ž๋ฆฌ์ˆ˜๋กœ ๊ตฌ์„ฑ
    if first > 0: dp[i] += dp[i-1] #ํ•œ ์ž๋ฆฌ ์ˆ˜๊ฐ€ 0๋ณด๋‹ค ํด๋•Œ
    if tenth >= 10 and tenth <= 26: dp[i] += dp[i-2] #๋‘ ์ž๋ฆฌ ์ˆ˜๊ฐ€ 10์ด์ƒ 26์ดํ•˜์ผ๋•Œ

 

์ด์ œ ๋กœ์ง์„ ๋‹ค ์งฐ์œผ๋ฉด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ์—์„œ๋Š” '์•”ํ˜ธ๊ฐ€ ์ž˜๋ชป๋˜์–ด ์•”ํ˜ธ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” 0์„ ์ถœ๋ ฅํ•œ๋‹ค.' ๋ผ๊ณ  ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์•”ํ˜ธ๊ฐ€ ์ž˜๋ชป๋œ๋‹ค๋Š” ๊ฑด ์–ด๋–ค ๊ฒฝ์šฐ์ธ์ง€ ๋‹จ์ˆœํžˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ์šฐ์„  0์ด ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„๋Š” 1~26์ธ๋ฐ 0์„ ์ž…๋ ฅ ๋ฐ›์œผ๋ฉด ํ•ด์„ํ•  ์ˆ˜ ์—†๊ฒ ์ฃ . 00020, 001, 01 ๋“ฑ ๋งจ ์ฒ˜์Œ์— 0์ด ๋ถ™์œผ๋ฉด ๋‹ค ์ž˜๋ชป๋œ ๊ฒฝ์šฐ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด 0์ด ์ค‘๊ฐ„์— ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์˜ˆ์‹œ๋กœ 1304๋ฅผ ์ƒ๊ฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ค‘๊ฐ„์— 10, 20์ด ์•„๋‹Œ 30์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋ถˆํ•„์š”ํ•œ 0์ด ๋“ค์–ด๊ฐ„ 04๊ฐ€ ๋“ค์–ด๊ฐ”๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋„ ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ ๋˜ํ•œ ์ •ํ•ด์ง„ ๊ทœ์น™์— ์–ด๊ธ‹๋‚˜๋Š” ์•”ํ˜ธ์ด๊ธฐ ๋•Œ๋ฌธ์— 0์ด ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋งจ ์ฒ˜์Œ์— ์ž…๋ ฅ ๋ฐ›์ž๋งˆ์ž for๋ฌธ์„ ๋Œ๋ฉด์„œ ์ด๋Ÿฐ ์˜ˆ์™ธ๋ฅผ ๋”ฐ๋กœ ๊ฑธ๋Ÿฌ๋‚ด์•ผ ํ• ๊นŒ์š”? ๊ทธ๋Ÿดํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

์ €ํฌ๊ฐ€ ์ง  ๋กœ์ง์— ๋”ฐ๋ฅด๋ฉด, ์šฐ์„  dp[1] = 1, dp[2] = 2๊นŒ์ง€๋Š” ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ index๊ฐ€ 3์ด ๋˜์—ˆ๊ณ , code[3] = 0์ž…๋‹ˆ๋‹ค. ํ•œ์ž๋ฆฌ์ˆ˜ ์ผ๋•Œ๋Š” 0์ด๊ณ , ๋‘ ์ž๋ฆฌ ์ˆ˜ ์ผ๋•Œ๋Š” 30์ด์ฃ . ์ €ํฌ์˜ ์กฐ๊ฑด๋ฌธ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ๊ฑธ๋ฆฌ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— dp[3]์—๋Š” ๊ทธ ์–ด๋– ํ•œ ๊ฐ’๋„ ๋”ํ•ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฆ‰, dp[3] = 0์ด๋ผ๋Š” ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  index๊ฐ€ 4๊ฐ€ ๋˜๋ฉด dp[3] = 0์ด๊ธฐ ๋•Œ๋ฌธ์— dp[4] = 0์ด ๋˜์–ด ๊ฒฐ๊ณผ ๊ฐ’์€ ์•”ํ˜ธ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์ธ 0์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. 

 

์ฆ‰, ๋งจ ์ฒ˜์Œ์— 0์ด ๋ถ™๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ ๋ฐ›์€ ํ›„ ๋ฐ”๋กœ ์ฒ˜๋ฆฌ ํ•ด์ฃผ๋ฉด, ๋‹ค๋ฅธ ์˜ˆ์™ธ๋“ค์€ ๋กœ์ง ๋‚ด์—์„œ ์•Œ์•„์„œ 0์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

<์ „์ฒด์ฝ”๋“œ>

import sys
code = [0] #์ธ๋ฑ์Šค ๊ฐ’ ๋งž์ถ”๊ธฐ์šฉ 0 ์ดˆ๊ธฐ๊ฐ’
code += list(sys.stdin.readline())
code.pop() #'\n'๋‚ ๋ฆฌ๊ธฐ

if code[1] == '0': 
    print(0)
    exit(0)

length = len(code)
dp = [0] * length
dp[0] = dp[1] = 1

for i in range(2, length):
    first = int(code[i])
    tenth = int(code[i-1])*10 + int(code[i])
    if first > 0: dp[i] += dp[i-1]
    if tenth >= 10 and tenth <= 26: dp[i] += dp[i-2]

print(dp[length-1]%1000000)

 

๋ธ”๋กœ๊ทธ๋ฅผ ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ ๋ดค๋Š”๋ฐ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์•„์„œ ์ตœ์„ ์„ ๋‹คํ•ด์„œ ํ’€์ด๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดํ•ด๊ฐ€ ๋˜์—ˆ์„์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹คใ… .ใ…  ํ˜น์‹œ ์ œ๊ฐ€ ์ž˜๋ชป ๊ธฐ์žฌํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š” ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค