๐ข N์ผ๋ก ๋ง๋ค๊ธฐ
๋ฐฑ์ค Gold4
๋ฌธ์
์คํ๋ ๋ ธํธ์ ์๋ฅผ ์ ๋ค๊ฐ ์๊ฐ ๋ง๋ค์ด์ง๋ ๋ฐฉ์์ ๊นจ๋ฌ์๋ค.
์ฒ์์ ์ด๋ค ์ซ์ ํ๋๋ฅผ ์ ๊ณ ๋ง๋ค์ด์ง ์์ ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ ์ซ์๋ฅผ ๊ณ์ ๋ถ์ด๋ฉด ์ด๋ค ์ N์ด๋ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋ค์ ๋งํด ์ด๋ค ์ N์ ๋ง๋ค๊ธฐ ์ํด์๋, ์ฒ์์ ์ด๋ค ์ซ์๋ฅผ ํ๋ ์ ๊ณ ์๋์ ๋ ๊ฐ์ง ํ๋์ ๋ฐ๋ณตํ๋ค.
- ์์ ์ผ์ชฝ์ ์ซ์๋ฅผ ํ๋ ์ ๋๋ค.
- ์์ ์ค๋ฅธ์ชฝ์ ์ซ์๋ฅผ ํ๋ ์ ๋๋ค.
์คํ๋ ์ด๋ค ์ N์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๊ฐ ๋ช ๊ฐ์ง์ธ์ง ๊ถ๊ธํด์ก๋ค. ์ด๋ฅผ ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด์ฃผ์. ์ซ์๋ฅผ ์ ๋ ๊ณผ์ ์์ ๋์จ ์๊ฐ ์์๋๋ก ๋ชจ๋ ๊ฐ๋ค๋ฉด ๊ฐ์ ๋ฐฉ๋ฒ์ด๋ค.
๋จ, ์ซ์๋ฅผ ์ ๋ ๊ณผ์ ์์ ์๋ 0์ผ๋ก ์์ํ ์ ์๋ค.
์ ๋ ฅ
์์ด ์๋ ์ ์ N์ด ์ฃผ์ด์ง๋ค. (0 โค N โค 10,000,000)
์ถ๋ ฅ
N์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
521
์์ ์ถ๋ ฅ 1
4
521์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด 4๊ฐ์ง์ด๋ค.
- 1 โ 21 โ 521
- 2 โ 21 โ 521
- 2 โ 52 โ 521
- 5 โ 52 โ 521
์์ ์ ๋ ฅ 2
9111
์์ ์ถ๋ ฅ 2
4
9111์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด 4๊ฐ์ง์ด๋ค.
- 1 โ 11 โ 111 โ 9111
- 1 โ 11 โ 911 โ 9111
- 1 โ 91 โ 911 โ 9111
- 9 โ 91 โ 911 โ 9111
๐ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ
์ด์ ์ ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ๋ ๋ฌธ์ ๊ฐ ์๊ฐ๋์ ๊ทธ๋ ๊ฒ ์ ๊ทผํด๋ณด๋ ค๊ณ ํ์ง๋ง ์คํจ โฆ
์๋ํ๋ฉด ํฌํฌ์ธํฐ๋ ํน์ ํ ํฉ์ ๊ฐ๋ ๋ถ๋ถ ์ฐ์ ์์ด์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ธ ๋ฐฉ๋ฉด ์ด ๋ฌธ์ ๋ ๋ถ๋ถ ์ฐ์ ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ๊ฐ ๋ฐฑํธ๋ํน์ผ๋ก ๋์ด์์ด ์ด ๋ฌธ์ ๊ฐ ์ ๋ฐฑํธ๋ํน์ธ์ง ํ์ฐธ์ ๊ณ ๋ฏผํ์ง๋ง ์ดํด๊ฐ ์ ๋์ด์ ์น์์ ์ด๊ฒ๋ ์๋ฃจ์ ์ ์ฐธ๊ณ ํ์๋ค.
๋ฐฑํธ๋ํน์ ํ์ฉํ๋ ์ ํ์ด ๊ต์ฅํ ๋ง๊ฒ ์ง๋ง ๊ทธ ์ค ํ๋๊ฐ [๋ฌธ์์ด์ ์๊ฑฐ๋ ์ค์ผ ๋] ์ฌ์ฉํ๋ค.
๐ ๊ณผ์ ์ค๊ณ/๊ด๋ฆฌ
์ผ๋จ DFS ๋์ ๊ณผ์ ์ ์๋์์ ์ค๋ช ํ๊ณ ์ ์ฒด์ ์ธ ํ๋ฆ์ ๋จผ์ ์ง์ด๋ณด๊ฒ ๋ค.
521์ ๋ง๋๋ ๊ณผ์ ์ค์ 5 โก๏ธ 52 โก๏ธ 521 ์ ์ฐ๋ฆฌ๋ 552521๋ก ํํํ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ๊ธธ์ด๊ฐ N์ธ ์ซ์์ ๊ณผ์ ๊ธธ์ด๋ N(N+1) / 2 ๊ฐ ๋๋ค. (๋ฑ์ฐจ์์ด์ ํฉ)
DFS๋ฅผ ํตํ์ฌ ๊ตฌํ ๋ชจ๋ ๊ณผ์ ์ ์งํฉ์ ๋ฃ๊ณ (์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ์ํ์ฌ) ์ฐ๋ฆฌ๋ ์ต์ข ์ ์ผ๋ก ์งํฉ์ ๊ธธ์ด๋ฅผ ๋ฝ์๋ด๋ฉด ๋๋ค.
5,2,1 ์ค์์ 2๋ถํฐ ์์ํ๋ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด๋ฉด ์ผ์ชฝ๋ถํฐ ํ์์ ์งํํ์ฌ process ๋ณ์์ ๊ณผ์ ์ ๊ณ์ ๊ธฐ๋กํด๋๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ์ด 5๊น์ง ๋๋ฌํ์ผ๋ฉด ๋ค์ ์ค๋ฅธ์ชฝ์ 1๊น์ง ํ์ํ๋ค.
๊ทธ๋ ๊ฒ ํด์ ์ฒซ๋ฒ์งธ ์ผ์ด์ค 2 โก๏ธ 252 โก๏ธ 252521 ์ด ๋ง๋ค์ด์ก๊ณ ์ด ๊ณผ์ ์ ๊ณ์ํ์ฌ ๋ฐ๋ณตํ๋ค.
2๋ฟ๋ง ์๋๋ผ 5์ 1์์ ์์ํ์ ๊ฒฝ์ฐ๋ ๋์ผํ๊ฒ ๋ฐ๋ณตํด์ฃผ๋ฉด ๋๋ค.
์งํ๊ณผ์ ์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
๐จ๐ปโ๐ป CODE
import sys
input = sys.stdin.readline
num = input().rstrip()
length = len(num)*(len(num)+1) // 2
way = set()
def dfs(left,right,process):
if len(process) == length:
way.add(process)
return
if left > 0:
dfs(left-1,right,process+num[left-1:right+1])
if right < len(num):
dfs(left,right+1,process+num[left:right+2])
for i in range(len(num)):
dfs(i,i,num[i])
print(len(way))