[BOJ][๐ก5][๋ฐฑ์ค#14891] ํฑ๋๋ฐํด
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์ด 8๊ฐ์ ํฑ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ํฑ๋๋ฐํด 4๊ฐ๊ฐ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ผ๋ ฌ๋ก ๋์ฌ์ ธ ์๋ค. ๋,ย ํฑ๋๋ N๊ทน ๋๋ S๊ทน ์ค ํ๋๋ฅผ ๋ํ๋ด๊ณ ์๋ค. ํฑ๋๋ฐํด์๋ ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋๋ฐ, ๊ฐ์ฅ ์ผ์ชฝ ํฑ๋๋ฐํด๊ฐ 1๋ฒ, ๊ทธ ์ค๋ฅธ์ชฝ์ 2๋ฒ, ๊ทธ ์ค๋ฅธ์ชฝ์ 3๋ฒ, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ํฑ๋๋ฐํด๋ 4๋ฒ์ด๋ค.
์ด๋, ํฑ๋๋ฐํด๋ฅผ ์ด K๋ฒ ํ์ ์ํค๋ ค๊ณ ํ๋ค. ํฑ๋๋ฐํด์ ํ์ ์ ํ ์นธ์ ๊ธฐ์ค์ผ๋ก ํ๋ค. ํ์ ์ ์๊ณ ๋ฐฉํฅ๊ณผ ๋ฐ์๊ณ ๋ฐฉํฅ์ด ์๊ณ , ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์ ํ๋ค.
ํฑ๋๋ฐํด๋ฅผ ํ์ ์ํค๋ ค๋ฉด, ํ์ ์ํฌ ํฑ๋๋ฐํด์ย ํ์ ์ํฌ ๋ฐฉํฅ์ ๊ฒฐ์ ํด์ผ ํ๋ค. ํฑ๋๋ฐํด๊ฐ ํ์ ํ ๋, ์๋ก ๋ง๋ฟ์ ๊ทน์ ๋ฐ๋ผ์ ์์ ์๋ ํฑ๋๋ฐํด๋ฅผ ํ์ ์ํฌ ์๋ ์๊ณ , ํ์ ์ํค์ง ์์ ์๋ ์๋ค. ํฑ๋๋ฐํด A๋ฅผ ํ์ ํ ๋, ๊ทธ ์์ ์๋ ํฑ๋๋ฐํด B์ ์๋ก ๋ง๋ฟ์ ํฑ๋์ ๊ทน์ด ๋ค๋ฅด๋ค๋ฉด, B๋ A๊ฐ ํ์ ํ ๋ฐฉํฅ๊ณผ ๋ฐ๋๋ฐฉํฅ์ผ๋ก ํ์ ํ๊ฒ ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด์.
๋ ํฑ๋๋ฐํด์ ๋ง๋ฟ์ ๋ถ๋ถ์ ์ด๋ก์ ์ ์ ์ผ๋ก ๋ฌถ์ฌ์๋ ๋ถ๋ถ์ด๋ค. ์ฌ๊ธฐ์, 3๋ฒ ํฑ๋๋ฐํด๋ฅผย ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๋ค๋ฉด, 4๋ฒ ํฑ๋๋ฐํด๋ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๊ฒ ๋๋ค. 2๋ฒ ํฑ๋๋ฐํด๋ ๋ง๋ฟ์ ๋ถ๋ถ์ด S๊ทน์ผ๋ก ์๋ก ๊ฐ๊ธฐ ๋๋ฌธ์, ํ์ ํ์ง ์๊ฒ ๋๊ณ , 1๋ฒ ํฑ๋๋ฐํด๋ 2๋ฒ์ด ํ์ ํ์ง ์์๊ธฐ ๋๋ฌธ์, ํ์ ํ์ง ์๊ฒ ๋๋ค. ๋ฐ๋ผ์, ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๋ชจ์์ ๋ง๋ค๊ฒ ๋๋ค.
์์ ๊ฐ์ย ์ํ์์ 1๋ฒ ํฑ๋๋ฐํด๋ฅผ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํค๋ฉด, 2๋ฒ ํฑ๋๋ฐํด๊ฐ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๊ฒ ๋๊ณ , 2๋ฒ์ด ํ์ ํ๊ธฐ ๋๋ฌธ์, 3๋ฒ๋ ๋์์ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๊ฒ ๋๋ค. 4๋ฒ์ 3๋ฒ์ด ํ์ ํ์ง๋ง, ๋ง๋ฟ์ ๊ทน์ด ๊ฐ๊ธฐ ๋๋ฌธ์ ํ์ ํ์ง ์๋๋ค. ๋ฐ๋ผ์, ์๋์ ๊ฐ์ ์ํ๊ฐ ๋๋ค.
ํฑ๋๋ฐํด์ ์ด๊ธฐ ์ํ์ ํฑ๋๋ฐํด๋ฅผ ํ์ ์ํจ ๋ฐฉ๋ฒ์ด ์ฃผ์ด์ก์ ๋, ์ต์ข ํฑ๋๋ฐํด์ ์ํ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ 1๋ฒ ํฑ๋๋ฐํด์ ์ํ, ๋์งธ ์ค์ 2๋ฒ ํฑ๋๋ฐํด์ ์ํ, ์ ์งธ ์ค์ 3๋ฒ ํฑ๋๋ฐํด์ ์ํ, ๋ท์งธ ์ค์ 4๋ฒ ํฑ๋๋ฐํด์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. ์ํ๋ 8๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , 12์๋ฐฉํฅ๋ถํฐ ์๊ณ๋ฐฉํฅ ์์๋๋ก ์ฃผ์ด์ง๋ค. N๊ทน์ 0, S๊ทน์ 1๋ก ๋ํ๋์๋ค. ๋ค์ฏ์งธ ์ค์๋ ํ์ ํ์ K(1 โค K โค 100)๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ K๊ฐ ์ค์๋ ํ์ ์ํจ ๋ฐฉ๋ฒ์ด ์์๋๋ก ์ฃผ์ด์ง๋ค. ๊ฐ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์ฒซ ๋ฒ์งธ ์ ์๋ ํ์ ์ํจ ํฑ๋๋ฐํด์ ๋ฒํธ, ๋ ๋ฒ์งธ ์ ์๋ ๋ฐฉํฅ์ด๋ค. ๋ฐฉํฅ์ด 1์ธ ๊ฒฝ์ฐ๋ ์๊ณ ๋ฐฉํฅ์ด๊ณ , -1์ธ ๊ฒฝ์ฐ๋ ๋ฐ์๊ณ ๋ฐฉํฅ์ด๋ค.
์ถ๋ ฅ
์ด K๋ฒ ํ์ ์ํจ ์ดํ์ ๋ค ํฑ๋๋ฐํด์ ์ ์์ ํฉ์ย ์ถ๋ ฅํ๋ค. ์ ์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐํ๋ค.
1๋ฒ ํฑ๋๋ฐํด์ 12์๋ฐฉํฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 1์ 2๋ฒ ํฑ๋๋ฐํด์ 12์๋ฐฉํฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 2์ 3๋ฒ ํฑ๋๋ฐํด์ 12์๋ฐฉํฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 4์ 4๋ฒ ํฑ๋๋ฐํด์ 12์๋ฐฉํฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 8์
์์
์์ 1
์ ๋ ฅ
10101111
01111101
11001110
00000010
2
3 -1
1 1
์ถ๋ ฅ
7
์์ 2
์ ๋ ฅ
11111111
11111111
11111111
11111111
3
1 1
2 1
3 1
์ถ๋ ฅ
15
์์ 3
์ ๋ ฅ
10001011
10000011
01011011
00111101
5
1 1
2 1
3 1
4 1
1 -1
์ถ๋ ฅ
6
์์ 4
์ ๋ ฅ
10010011
01010011
11100011
01010101
8
1 1
2 1
3 1
4 1
1 -1
2 -1
3 -1
4 -1
์ถ๋ ฅ
5
My Sol
from collections import deque
def check(WN, d):
global status, visited
Wnow = wheels[WN]
status.append((WN, d))
visited[WN] = 1
if 0<=WN+1<4 and not visited[WN+1]:
if Wnow[2] != wheels[WN+1][6]:
check(WN+1, -d)
if 0<=WN-1<4 and not visited[WN-1]:
if Wnow[6] != wheels[WN-1][2]:
check(WN-1, -d)
return
def turn():
global status
while status:
num, d = status.popleft()
Wnow = wheels[num]
if d==1:
a = Wnow.pop()
Wnow.appendleft(a)
else:
a = Wnow.popleft()
Wnow.append(a)
wheels = list(deque(list(map(int, input()))) for _ in range(4))
T = int(input())
status = deque()
for _ in range(T):
visited = [0]*4
WN, d = map(int, input().split())
WN -= 1
check(WN, d)
turn()
score = 0
for i in range(4):
score += wheels[i][0]*(1<<i)
print(score)
checkํจ์๋ dfs๋ก ํฑ๋๋ฐํด๊ฐ ๋ง๋ฌผ๋ ค ์๋ ํ ์ํ๋ฅผ ํ์ธํ์ฌ ๋ค๋ฅธ ๊ทน์ด๋ผ๋ฉด status ๋ฐฐ์ด์ ํ์ฌ ํฑ๋๋ฐํด ๋ฒํธ์ ํ์ ๋ฐฉํฅ์ tuple๋ก ๋ฃ๋๋ค. ๋ง์ฝ ๊ฐ์ ๊ทน์ด๋ผ๋ฉด ์ดํ๋ฅผ ํ์ธํ์ง ์๊ณ ์ข ๋ฃํ๋ค.
์ดํ turn ํจ์๋ฅผ ์ด์ฉํด status ๋ฐฐ์ด์ ํฑ๋๋ฐํด๋ฅผ ํ๋ํ๋ ํ์ ํด์ฃผ๋๋ฐ, ํ์ ๋ฐฉํฅ์ ๋ฐ๋ผ ์๊ณ๋ฐฉํฅ์ ๋งจ ๋ค๋ฅผ ๋นผ๋ด๋ pop ์ดํ ๋งจ ์์ผ๋ก ๋ฃ์ด์ฃผ๋ appendleft๋ฅผ ํด์ฃผ๊ณ , ๋ฐ์๊ณ๋ฐฉํฅ์ ๋งจ ์์ ๋นผ๋ด๋ popleft ์ดํ ๋งจ ๋ค๋ก ๋ฃ์ด์ฃผ๋ append๋ฅผ ์ค์ํ๋ค. ์๋ฐฉํฅ pop append๋ฅผ ์ํด deque๋ฅผ ์ฌ์ฉํ์๋ค.
์ดํ score์ wheel ๋ฒํธ์ ๋ฐ๋ฅธ 0๋ฒ ์ธ๋ฑ์ค, ์ฆ 12์ ๋ฐฉํฅ ํฑ๋์ ๊ฐ์ ํ์ธํด ๋นํธ๋ก shiftํด์ฃผ๋ฉฐ ๊ณฑํด ๋ํด์ฃผ๊ณ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ