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

์ž‘์„ฑ:    

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

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

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #15662


๋ฌธ์ œ

์ด 8๊ฐœ์˜ ํ†ฑ๋‹ˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด T๊ฐœ๊ฐ€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ผ๋ ฌ๋กœ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋˜,ย ํ†ฑ๋‹ˆ๋Š” N๊ทน ๋˜๋Š” S๊ทน ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์—๋Š” ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ 1๋ฒˆ, ๊ทธ ์˜ค๋ฅธ์ชฝ์€ 2๋ฒˆ,ย โ€ฆ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” T๋ฒˆ์ด๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ T๊ฐ€ 4์ธ ๊ฒฝ์šฐ์ด๋‹ค.

์ด๋•Œ, ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ์ด K๋ฒˆ ํšŒ์ „์‹œํ‚ค๋ ค๊ณ  ํ•œ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ํšŒ์ „์€ ํ•œ ์นธ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค. ํšŒ์ „์€ ์‹œ๊ณ„ ๋ฐฉํ–ฅ๊ณผ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์ด ์žˆ๊ณ , ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํšŒ์ „ํ•œ๋‹ค.

ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํšŒ์ „์‹œํ‚ค๋ ค๋ฉด, ํšŒ์ „์‹œํ‚ฌ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ย ํšŒ์ „์‹œํ‚ฌ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ํšŒ์ „ํ•  ๋•Œ, ์„œ๋กœ ๋งž๋‹ฟ์€ ๊ทน์— ๋”ฐ๋ผ์„œ ์˜†์— ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํšŒ์ „์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๊ณ , ํšŒ์ „์‹œํ‚ค์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด A๋ฅผ ํšŒ์ „ํ•  ๋•Œ, ๊ทธ ์˜†์— ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด B์™€ ์„œ๋กœ ๋งž๋‹ฟ์€ ํ†ฑ๋‹ˆ์˜ ๊ทน์ด ๋‹ค๋ฅด๋‹ค๋ฉด, B๋Š” A๊ฐ€ ํšŒ์ „ํ•œ ๋ฐฉํ–ฅ๊ณผ ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž.

๋‘ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๋งž๋‹ฟ์€ ๋ถ€๋ถ„์€ ์ดˆ๋ก์ƒ‰ ์ ์„ ์œผ๋กœ ๋ฌถ์—ฌ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์—ฌ๊ธฐ์„œ, 3๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผย ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ–ˆ๋‹ค๋ฉด, 4๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋œ๋‹ค. 2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” ๋งž๋‹ฟ์€ ๋ถ€๋ถ„์ด S๊ทน์œผ๋กœ ์„œ๋กœ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์—, ํšŒ์ „ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๊ณ , 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” 2๋ฒˆ์ด ํšŒ์ „ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, ํšŒ์ „ํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๋ชจ์–‘์„ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

์œ„์™€ ๊ฐ™์€ย ์ƒํƒœ์—์„œ 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „์‹œํ‚ค๋ฉด, 2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋˜๊ณ , 2๋ฒˆ์ด ํšŒ์ „ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, 3๋ฒˆ๋„ ๋™์‹œ์— ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋œ๋‹ค. 4๋ฒˆ์€ 3๋ฒˆ์ด ํšŒ์ „ํ•˜์ง€๋งŒ, ๋งž๋‹ฟ์€ ๊ทน์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ํšŒ์ „ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

ํ†ฑ๋‹ˆ๋ฐ”ํ€ด T๊ฐœ์˜ ์ดˆ๊ธฐ ์ƒํƒœ์™€ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํšŒ์ „์‹œํ‚จ ๋ฐฉ๋ฒ•์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ตœ์ข… ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๊ฐœ์ˆ˜ T (1 โ‰ค T โ‰ค 1,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.ย  ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ T๊ฐœ์˜ ์ค„์— ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ๊ฐ€ ๊ฐ€์žฅ ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ƒํƒœ๋Š” 8๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , 12์‹œ๋ฐฉํ–ฅ๋ถ€ํ„ฐ ์‹œ๊ณ„๋ฐฉํ–ฅ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. N๊ทน์€ 0, S๊ทน์€ 1๋กœ ๋‚˜ํƒ€๋‚˜์žˆ๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” ํšŒ์ „ ํšŸ์ˆ˜ K(1 โ‰ค K โ‰ค 1,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ K๊ฐœ ์ค„์—๋Š” ํšŒ์ „์‹œํ‚จ ๋ฐฉ๋ฒ•์ด ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ํšŒ์ „์‹œํ‚จ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๋ฒˆํ˜ธ, ๋‘ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ๋ฐฉํ–ฅ์ด๋‹ค. ๋ฐฉํ–ฅ์ด 1์ธ ๊ฒฝ์šฐ๋Š” ์‹œ๊ณ„ ๋ฐฉํ–ฅ์ด๊ณ , -1์ธ ๊ฒฝ์šฐ๋Š” ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์ด๋‹ค.


์ถœ๋ ฅ

์ด K๋ฒˆ ํšŒ์ „์‹œํ‚จ ์ดํ›„์— 12์‹œ๋ฐฉํ–ฅ์ดย S๊ทน์ธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์˜ˆ์ œ 1

์ž…๋ ฅ

4
10101111
01111101
11001110
00000010
2
3 -1
1 1


์ถœ๋ ฅ

3


์˜ˆ์ œ 2

์ž…๋ ฅ

4
11111111
11111111
11111111
11111111
3
1 1
2 1
3 1


์ถœ๋ ฅ

4


์˜ˆ์ œ 3

์ž…๋ ฅ

4
10001011
10000011
01011011
00111101
5
1 1
2 1
3 1
4 1
1 -1


์ถœ๋ ฅ

2


์˜ˆ์ œ 4

์ž…๋ ฅ

4
10010011
01010011
11100011
01010101
8
1 1
2 1
3 1
4 1
1 -1
2 -1
3 -1
4 -1


์ถœ๋ ฅ

2


์˜ˆ์ œ 5

์ž…๋ ฅ

5
10010011
01010011
11100011
01010101
01010011
10
1 1
2 1
3 1
4 1
1 -1
2 -1
3 -1
4 -1
5 1
5 -1


์ถœ๋ ฅ

5


My Sol

from collections import deque

def main():
    def make_wheels():
        wheels = []
        for _ in range(T):
            wheels.append(deque())
            lst = list(map(int, input()))
            for i in lst:
                wheels[-1].append(i)
        return wheels

    def turn(n, d):
        if n in turned: return
        turned.add(n)

        if n-1>=0 and wheels[n][6]^wheels[n-1][2]:
            turn(n-1, -d)
        if n+1<T and wheels[n][2]^wheels[n+1][6]:
            turn(n+1, -d)

        if d==1:
            k = wheels[n].pop()
            wheels[n].appendleft(k)
        else:
            k = wheels[n].popleft()
            wheels[n].append(k)

    T = int(input())
    wheels = make_wheels()
    N = int(input())
    for _ in range(N):
        n, d = map(int, input().split())
        turned = set()
        turn(n-1, d)

    ret = 0
    for wheel in wheels:
        if wheel[0]: ret += 1
    return ret

print(main())

์‚ฌ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด๋Š” DFS๋ฅผ ์‚ฌ์šฉํ•˜์˜€์œผ๋‚˜, ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ์—๋Š” deque๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

  1. ๊ฐ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ •๋ณด๋ฅผ wheels๋ฐฐ์—ด์— deque์— ๋‹ด์•„ ์ €์žฅํ•˜์€ 2์ฐจ์› ๋ฐฐ์—ด์„ make_wheels ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•œ๋‹ค.
  2. ๋ช‡ ๋ฒˆ์งธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆด ๊ฒƒ์ธ์ง€ ์ •๋ณด๋ฅผ N๋ฒˆ ๋ฐ›์•„ ์ง„ํ–‰ํ•˜๋Š”๋ฐ, ๋Œ๋ฆฌ๋Š” ๊ฒƒ์€ turn ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„ํ–ˆ๋‹ค.
  3. ์ฒซ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ๋Œ์•„๊ฐ€๋ฉฐ ์–‘ ์˜†์˜ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ๋Œ๋ฆฌ๋Š”๋ฐ, ์ด๋•Œ ํ•œ ๋ฒˆ ๋Œ์•„๊ฐ„ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ์ค‘๋ณต์œผ๋กœ ๋Œ๋ฆฌ์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ turned ๋ผ๋Š” set์„ ๋‘์–ด ๋Œ์•„๊ฐˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๋ฒˆํ˜ธ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค.
  4. ํ˜„์žฌ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ ๋งž๋‹ฟ์•„์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ S, N์ด ์„œ๋กœ ๋‹ค๋ฅด๋‹ค๋ฉด ํ•ด๋‹น ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” ํ˜„์žฌ ํšŒ์ „ ๋ฐฉํ–ฅ๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๋„๋ก turn ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€๋กœ ํ˜ธ์ถœํ•ด์ค€๋‹ค. ์ด๋•Œ S, N์ด ๋‹ค๋ฅด๋‹ค๋ฉด 0๊ณผ 1์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํŠธ๋งˆ์Šคํ‚น์˜ XOR ์—ฐ์‚ฐ์œผ๋กœ ์†์‰ฝ๊ฒŒ ํ™•์ธํ•œ๋‹ค.
  5. ์ขŒ์šฐ์˜ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋กœ ์ •๋ณด๋กœ ๋จผ์ € ์ „๋‹ฌํ•ด์ค€ ์ด์œ ๋Š”, ๋Œ์•„๊ฐ€๊ธฐ ์ด์ „์˜ ํ†ฑ๋‹ˆ ์ •๋ณด๋กœ ์ขŒ์šฐ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ๋Œ๋ ค์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋•Œ๋ฌธ์— ์ขŒ์šฐ๋ฅผ ํ™•์ธํ•ด turn ํ•จ์ˆ˜๋ฅผ ๋„˜๊ธฐ๊ณ , ํšŒ์ „ ๋ฐฉํ–ฅ์„ ๊ณ ๋ คํ•ด ๋’ค์—์„œ ๋นผ์„œ ์•ž์— ๋„ฃ์–ด์ค„์ง€, ์•ž์—์„œ ๋นผ์„œ ๋’ค๋กœ ๋„ฃ์–ด์ค„์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  6. ์ด ์ผ๋ จ์˜ ๊ณผ์ •์„ NํšŒ ๋ฐ˜๋ณตํ•˜๊ณ  ๋‚จ์€ wheels์˜ ๊ฐ deque์˜ 0๋ฒˆ ์ธ๋ฑ์Šค ๊ฐ’, ์ฆ‰ 12์‹œ ๋ฐฉํ–ฅ ํ†ฑ๋‹ˆ๋ฅผ ๋ชจ๋‘ ๋”ํ•ด์ค€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

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

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