ํ’€์ด


์ด ๋ฌธ์ œ์˜ ๊ตฌํ˜„์‚ฌํ•ญ์€ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๋‹ค.

  1. ํšŒ์ „์‹œํ‚ฌ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ขŒ์ธก๊ณผ ์šฐ์ธก์— ๋ฐฐ์น˜๋œ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ํšŒ์ „์œ ๋ฌด ํŒ๋‹จ.

  2. ํšŒ์ „๋ฐฉํ–ฅ์— ๋”ฐ๋ฅธ ํ†ฑ๋‹ˆ์ƒํƒœ ์—…๋ฐ์ดํŠธ.

ํšŒ์ „์‹œํ‚ฌ ํ†ฑ๋‹ˆ์™€ ๋ฐฉํ–ฅ์ด ์ฃผ์–ด์กŒ์„๋•Œ, ์šฐ์„ ์ ์œผ๋กœ ์–‘ ์˜†์— ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋“ค์ด ์˜ํ–ฅ์„ ๋ฐ›๋Š”์ง€ ์•Œ์•„๋ด์•ผํ•œ๋‹ค.

์ขŒ์ธก๊ณผ ์šฐ์ธก์„ ๋‚˜๋ˆ„์–ด ๋งž๋ฌผ๋ฆฌ๋Š” ํ†ฑ๋‹ˆ๊ฐ€ ์„œ๋กœ ์˜ํ–ฅ์„ ์ค€๋‹ค๋ฉด ๊ทธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์—ญ์‹œ ํšŒ์ „ํ•œ๋‹ค๋Š” ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

ํšŒ์ „ํ•  ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ ๊ทธ ๋ฐฉํ–ฅ์˜ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ์ข…ํ•ฉํ•œ ํ›„ ํšŒ์ „๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋“ค์„ ํšŒ์ „์‹œํ‚ค๋ฉด๋œ๋‹ค.

์ดํ›„ ์ถœ๋ ฅ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ •๋‹ต์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด๋œ๋‹ค.

์†Œ์Šค์ฝ”๋“œ


import sys
 
input = sys.stdin.readline
 
 
def rotate(gn, r):
    gn -= 1
    rotation = [0 for _ in range(4)]
    direction = [0 for _ in range(4)]
    rotation[gn] = 1
    direction[gn] = r
 
    # ๊ธฐ์ค€ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋กœ๋ถ€ํ„ฐ ์šฐ์ธก
    for i in range(gn, 3):
        if gears[i][2] != gears[i + 1][6]:
            rotation[i + 1] = 1
            direction[i + 1] = -direction[i]
        else:
            break
 
    # ๊ธฐ์ค€ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋กœ๋ถ€ํ„ฐ ์ขŒ์ธก
    for i in range(gn, 0, -1):
        if gears[i][6] != gears[i - 1][2]:
            rotation[i - 1] = 1
            direction[i - 1] = -direction[i]
        else:
            break
 
    # ํšŒ์ „๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ํšŒ์ „
    for i in range(4):
        if rotation[i] == 1:
            if direction[i] == 1:
                g = gears[i].pop()
                gears[i].insert(0, g)
            else:
                g = gears[i].pop(0)
                gears[i].append(g)
 
 
gears = [[int(i) for i in input().rstrip()] for _ in range(4)]
K = int(input())
for _ in range(K):
    gn, r = map(int, input().split())
    rotate(gn, r)
 
ans = 0
 
for i in range(4):
    if gears[i][0] == 1:
        ans += 2**i
 
print(ans)

References