๋ฌธ์ ๋งํฌ
๋ฌธ์ ์์ฝ
ํ๊ต ์ง๋๊ฐ ๊ทธ๋ํ๋ก ์ฃผ์ด์ง๋ค. ์ ๋ณด๊ณผํ๊ด์์ ์ถ๋ฐํด ์ฐ์ฑ ํ ํ D๋ถ ํ, ์ ๋ณด๊ณผํ๊ด์ผ๋ก ๋์์ค๋ ์ฐ์ฑ ๊ฒฝ๋ก์ ์๋ฅผ ๊ตฌํ๋ค. ๋จ, ์ฐ์ฑ ์ ํ๋ฉฐ ๊ฑด๋ฌผ์ ๋จธ๋ฌด๋ฅด๋ ๊ฒฝ์ฐ๋ ์๊ณ , ๊ฐ ๊ฑด๋ฌผ ๊ฐ ์ด๋ ์๊ฐ์ 1๋ถ์ด๋ค.
ํ์ด ์ค๋ช
๋ฐฑ์ค์ ๋์์๋ ์ด ๋ฌธ์ ์ ์๊ณ ๋ฆฌ์ฆ ์ ํ์ DP์ ๊ทธ๋ํ ์ด๋ก ์ด์๋ค.
์ฒ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ณ 15๋ถ ์ ๋ ํ๋ค๊ฐ ๊ฐ์ ์ ๋ชป ์ก๋ ๊ฒ ๊ฐ์์ ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ๋ดค๋ค.
๋ด๊ฐ ์ดํดํ๊ณ ์๋ DP๋ ์ด์ ์ ๊ณ์ฐ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ค์ ๊ณ์ฐ๊ฐ์ ๊ตฌํ๋ ๊ฒ, ๊ทธ๋ํ ์ด๋ก ์ ๊ทธ๋ํ ์ฌ์ฉํ๋ ๊ฒ(?) ํ๊ต์ '๊ทธ๋ํ ์ด๋ก ' ์์ ์ ๋ค์ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค...๐
์ง๊ธ ๊ธ ์ฐ๋ฉด์ ์ฐพ์ ๊ฑด๋ฐ, ํ์ด์ฌ ๊ทธ๋ํ ๊ตฌํ ๋ฐฉ๋ฒ์ด ๋ด๊ฐ ํ ๋ฐฉ๋ฒ๊ณผ ๊ฐ๋ค..!!
๋์ ํ์ด
def possibilities(states, school):
result_states={'ํ์ํ๊ด': 0,
'์ง๋ฆฌ๊ด': 0,
'ํ๋จ๊ณตํ๊ด': 0,
'ํ๊ฒฝ์ง๊ธฐ๋
๊ด': 0,
'์ ์๊ด': 0,
'๋ฏธ๋๊ด': 0,
'์ ์ฐ๊ด': 0,
'์ ๋ณด๊ณผํ๊ด': 0}
for state, people in states.items():
for route in school[state]:
result_states[route]+=people
for state, people in result_states.items():
result_states[state]=people%1000000007
return result_states
school={'ํ์ํ๊ด': ['์ง๋ฆฌ๊ด', 'ํ๋จ๊ณตํ๊ด'],
'์ง๋ฆฌ๊ด': ['ํ์ํ๊ด', 'ํ๊ฒฝ์ง๊ธฐ๋
๊ด', '์ ์๊ด'],
'ํ๋จ๊ณตํ๊ด': ['ํ์ํ๊ด', 'ํ๊ฒฝ์ง๊ธฐ๋
๊ด'],
'ํ๊ฒฝ์ง๊ธฐ๋
๊ด': ['ํ๋จ๊ณตํ๊ด', '์ง๋ฆฌ๊ด', '์ ์๊ด', '๋ฏธ๋๊ด'],
'์ ์๊ด': ['์ง๋ฆฌ๊ด', 'ํ๊ฒฝ์ง๊ธฐ๋
๊ด', '๋ฏธ๋๊ด', '์ ์ฐ๊ด'],
'๋ฏธ๋๊ด': ['ํ๊ฒฝ์ง๊ธฐ๋
๊ด', '์ ์๊ด', '์ ์ฐ๊ด', '์ ๋ณด๊ณผํ๊ด'],
'์ ์ฐ๊ด': ['์ ์๊ด', '๋ฏธ๋๊ด', '์ ๋ณด๊ณผํ๊ด'],
'์ ๋ณด๊ณผํ๊ด': ['์ ์ฐ๊ด', '๋ฏธ๋๊ด']}
states={'ํ์ํ๊ด': 0,
'์ง๋ฆฌ๊ด': 0,
'ํ๋จ๊ณตํ๊ด': 0,
'ํ๊ฒฝ์ง๊ธฐ๋
๊ด': 0,
'์ ์๊ด': 0,
'๋ฏธ๋๊ด': 0,
'์ ์ฐ๊ด': 0,
'์ ๋ณด๊ณผํ๊ด': 1}
D=int(input())
for walk in range(D):
states=possibilities(states, school)
print(states["์ ๋ณด๊ณผํ๊ด"])
๋์ ํ์ด ์คํ์ผ์ ์ต๋ํ ์ดํดํ ๋ฐ๋ฅผ ์ ๋ฆฌํ์ฌ ๊ทธ๋๋ก ๊ตฌํํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์์ง ์ฝ๋ฉ ํ ์คํธ์ ์ต์ํ์ง ์์์ ๊ทธ๋ฐ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์กฐ๊ธ ๋นํจ์จ์ง์ธ์ ๋ฌธ์ ๋ฅผ ํธ๋ ํ๋ฅ ์ ๋ ๋์ด๋ ค๊ณ ํ๋ค.
์ ์ถ ํํฉ์ ๋ดค์ ๋, ๋ค๋ฅธ ์ฌ๋๋ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํ์ฐํ ์ ์ด์ ์ ์ฝ๋๊ฐ ๋นํจ์จ์ ์ด๋ผ๋ ๊ฒ์ด ๋๊ปด์ก๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก C์ Python์ ์ฐจ์ด์ด๊ธฐ๋ ํ์ผ๋, ๊ฐ์ Python ๋ด์์๋ ํ์ด ๋ฐฉ๋ฒ+๋ฉ๋ชจ๋ฆฌ์ ์๊ฐ ์ฌ์ฉ๋์ด ํ์ฐํ ์ฐจ์ด๋์ ๋น๊ตํด๋ณด๊ณ ์ ํ๋ค.
๋ค๋ฅธ ์ฌ๋ ํ์ด1
'''
0: ์ ๋ณด๊ณผํ๊ด
1: ์ ์ฐ๊ด
2: ๋ฏธ๋๊ด
3: ์ ์๊ด
4: ํ๊ฒฝ์ง
5: ์ง๋ฆฌ๊ด
6: ํ์ํ๊ด
7: ํ๋จ๊ณตํ๊ด
'''
DP = [1,0,0,0,0,0,0,0] #0๋ถ์ผ๋
def nxt(state):
tmp = [0 for _ in range(8)]
tmp[0] = state[1] + state[2] # ์ ๋ณด๊ณผํ๊ด์ ์ค๋ ค๋ฉด ์ ์ฐ, ๋ฏธ๋๊ด์์ 1๋ถ์ ์ ์ค๊ธฐ
tmp[1] = state[0] + state[2] + state[3]
tmp[2] = state[0] + state[1] + state[3] + state[4]
tmp[3] = state[1] + state[2] + state[4] + state[5]
tmp[4] = state[2] + state[3] + state[5] + state[7]
tmp[5] = state[3] + state[4] + state[6]
tmp[6] = state[5] + state[7]
tmp[7] = state[4] + state[6]
return(tmp)
for i in range(int(input())):
DP = nxt(DP)
print(DP[0] % 1000000007)
๋ ๊ธ ์ฐ๋ฉด์ ๊นจ๋ฌ์๋๋ฐ 1์ฐจ์ DP, 2์ฐจ์ DP๊ฐ ๋ฌด์์ธ์ง์ด๋ค.
์ด ๋ถ์ 1์ฐจ์ DP, ์ฆ 1์ฐจ์ list๋ก DP๋ฅผ ๊ตฌํํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๋ฐฐ์ธ ์ ์ ๊ฐ ๋ํ๋๋ง๋ค index๋ฅผ ์ ์ํ๊ณ 0, 1์ ๊ฐ๊ฒฐํ ๋ฆฌ์คํธ๋ก ํํํ์๋ค๋ ์ ์ด๋ค.
์ข๋ค ๐
๋ค๋ฅธ ์ฌ๋ ํ์ด2
C๋ก ํธ์ ๋ถ๋ค์ด ๋๋ถ๋ถ ์ด ํ์ด๋ฅผ ์ฌ์ฉํ ๊ฒ ๊ฐ์๋ฐ, ์ง๊ธ๋ ์ด ํ์ด๊ฐ ์ ์ดํด๊ฐ ๋์ง ์๋๋ค... ๐ฅฒ
# https://www.acmicpc.net/problem/12849
D = int(input())
matrix = [
[0, 1, 1, 0, 0, 0, 0, 0],
[1, 0, 1, 1, 0, 0, 0, 0],
[1, 1, 0, 1, 1, 0, 0, 0],
[0, 1, 1, 0, 1, 1, 0, 0],
[0, 0, 1, 1, 0, 1, 0, 1],
[0, 0, 0, 1, 1, 0, 1, 0],
[0, 0, 0, 0, 0, 1, 0, 1],
[0, 0, 0, 0, 1, 0, 1, 0]
]
l = len(matrix)
# ํ๋ ฌ์ ๊ณฑ์
mod = 1000000007
def matrix_dot(mat1, mat2):
row, k = len(mat1), len(mat1[0])
k, col = len(mat2), len(mat2[0])
result = [[0 for _ in range(col)] for _ in range(row)]
for i in range(row):
for j in range(col):
for k_ in range(k):
result[i][j] += (mat1[i][k_] * mat2[k_][j])%mod
result[i][j] %= mod
return result
# ๋จ์ํ๋ ฌ
ret = [[0 for _ in range(l)] for _ in range(l)]
for i in range(l):
for j in range(l):
if i == j:
ret[i][j] = 1
# ํ๋ ฌ์ ๊ฑฐ๋ญ์ ๊ณฑ & ๋ถํ ์ ๋ณต(๋นํธ์ฐ์ฐ)
while D:
if D & 1 == 1:
ret = matrix_dot(ret, matrix)
D >>= 1
matrix = matrix_dot(matrix, matrix)
print(ret[0][0])
์ฝ๋๋ฅผ ์ง๊ด์ ์ผ๋ก ํด์ํด๋ณด๋ฉด,
ret=๋จ์ํ๋ ฌ
matrix=ํ๊ต ๊ฑด๋ฌผ ๊ฐ ๊ด๊ณ๋ฅผ ํ๋ ฌ๋ก ๋ํ๋ธ ๊ฒ
D๊ฐ ํ์์ผ ๋, ret๋ฅผ ์ ๋ฐ์ดํธํ๊ณ while๋ฌธ์ผ๋ก D๊ฐ 0์ด ๋ ๋๊น์ง 2๋ก ๋๋๋ค. ๊ฐ ์ํ๋ง๋ค matrix๋ ์๊ธฐ ์์ ๊ณผ ํ๋ ฌ๊ณฑ์ด ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ๋๊ตฐ๊ฐ ์ค๋ช ํด์ฃผ๋ฉด ์ข๊ฒ ๋ค...๐
๊ณฐ๊ณฐํ ์๊ฐํด๋ ์ ํ๋ ฌ์ ๊ฑฐ๋ญ์ ๊ณฑ์ด ๊ฐ๋ฅํ ๊ฒฝ๋ก ๊ฐฏ์์ ์ฐ๊ด๋๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋น...