[BOJ][๐ŸŸก5][๋ฐฑ์ค€#14891] ํ†ฑ๋‹ˆ๋ฐ”ํ€ด

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #14891


๋ฌธ์ œ

์ด 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ํ•ด์ฃผ๋ฉฐ ๊ณฑํ•ด ๋”ํ•ด์ฃผ๊ณ  ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ