๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 14891_ํ†ฑ๋‹ˆ๋ฐ”ํ€ด

๋ฟŒ์•ผ._. 2022. 5. 12. 17:26

Gold V

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/14891)

<ํ†ฑ๋‹ˆ๋ฐ”ํ€ด>

๋ฌธ์ œ 

 

* ๋ฌธ์ œ๊ฐ€ ๊ธธ์–ด์„œ ์ƒ๋žต

 

 

์ž…๋ ฅ

 

์ฒซ์งธ ์ค„์— 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์ 

 

 

๋ฌธ์ œ ํ’€์ด

 

 - my solution (Python)

 

import sys
from collections import deque

def change( direction, num):
    before = arr[num]
    if direction==1: # ์‹œ๊ณ„
        before=list(before[-1])+before[:7]
    else: # ๋ฐ˜์‹œ๊ณ„
        before=before[1::]+list(before[0])

    return before

arr=[] # ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์ƒํƒœ
temp_arr=[] # ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋Œ์•„๊ฐ€๋Š” ์ƒํƒœ
for i in range(4): 
    x=list(sys.stdin.readline().strip())
    arr.append(x)
    temp_arr.append(x)

k=int(input()) # ํšŒ์ „ ํšŸ์ˆ˜
command=deque([]) # ํšŒ์ „์‹œํ‚จ ๋ฐฉ๋ฒ•
for i in range(k):
    command.append(list(map(int,sys.stdin.readline().split())))

for i in command:
    visited=[0,0,0,0] # ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
    ex_command=deque([i])
    visited[i[0]-1]=1
    while ex_command:
        temp=ex_command.popleft()
        temp_arr[temp[0]-1]=change(temp[1], temp[0] - 1) 
        if temp[0]==1: # 1๋ฒˆ
            if arr[0][2]!=arr[1][6]: 
                if temp[1]==1: # ์‹œ๊ณ„
                        temp_arr[1]=change(-1, 1)
                        if visited[1]==0:
                            visited[1]=1
                            ex_command.appendleft([2,-1])
                else: # ๋ฐ˜์‹œ๊ณ„
                    temp_arr[1]=change(1,1)
                    if visited[1] == 0:
                        visited[1] = 1
                        ex_command.appendleft([2,1])
        elif temp[0]==4: # 4๋ฒˆ
            if arr[3][6]!=arr[2][2]: 
                if temp[1]==1: # ์‹œ๊ณ„
                    temp_arr[2]=change(-1,2)
                    if visited[2] == 0:
                        visited[2] = 1
                        ex_command.appendleft([3, -1])
                else: # ๋ฐ˜์‹œ๊ณ„
                    temp_arr[2]=change(1,2)
                    if visited[2] == 0:
                        visited[2] = 1
                        ex_command.appendleft([3, 1])
        else: # 2๋ฒˆ, 3๋ฒˆ 
            if arr[temp[0]-1][2]!=arr[temp[0]][6]:
                if temp[1]==1: # ์‹œ๊ณ„
                    temp_arr[temp[0]]=change(-1, temp[0])
                    if visited[temp[0]] == 0:
                        visited[temp[0]] = 1
                        ex_command.appendleft([temp[0]+1, -1])
                else: # ๋ฐ˜์‹œ๊ณ„
                    temp_arr[temp[0]] = change(1,temp[0])
                    if visited[temp[0]] == 0:
                        visited[temp[0]] = 1
                        ex_command.appendleft([temp[0]+1, 1])
            if arr[temp[0]-1][6]!=arr[temp[0]-2][2]:
                if temp[1]==1: # ์‹œ๊ณ„
                    temp_arr[temp[0]-2]=change(-1,temp[0]-2)
                    if visited[temp[0]-2] == 0:
                        visited[temp[0]-2] = 1
                        ex_command.appendleft([temp[0]-1, -1])
                else: # ๋ฐ˜์‹œ๊ณ„
                    temp_arr[temp[0]-2]=change(1, temp[0]-2)
                    if visited[temp[0]-2] == 0:
                        visited[temp[0]-2] = 1
                        ex_command.appendleft([temp[0]-1, 1])
    arr=temp_arr[:]

result=0
if arr[0][0]=='1': # 1๋ฒˆ
    result+=1
if arr[1][0]=='1': # 2๋ฒˆ
    result+=2
if arr[2][0]=='1': # 3๋ฒˆ
    result+=4
if arr[3][0]=='1': # 4๋ฒˆ
    result+=8

print(result)

 

๋ฌธ์ œ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค. 

 

โ“ ์–ด๋Š ๋ถ€๋ถ„์„ ์ดํ•ดํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋Š”๊ฐ€?

ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ๋Œ์•„๊ฐ€๋Š”๋ฐ ์›๋ž˜ ์ƒํƒœ์—์„œ ๊ทน์ด ๊ฐ™์€์ง€ ํŒ๋ณ„ํ•˜๋Š” ๊ฒƒ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ์ฒ˜์Œ์— ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์—๋Š” ํ•˜๋‚˜์˜ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ๋Œ์•„๊ฐ„ ํ›„ ๊ทธ ์ƒํƒœ์—์„œ ์—ฐ์†์ ์œผ๋กœ ์ผ์–ด๋‚˜๋Š” ์ผ์ธ ์ค„ ์•Œ์•˜๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค.

 

 

  • change ( ๋Œ์•„๊ฐ€๋Š” ๋ฐฉํ–ฅ, ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋ฒˆํ˜ธ )
    : ์‹œ๊ณ„ ๋ฐฉํ–ฅ, ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ
  • arr = ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์ƒํƒœ
    temp_arr = ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋Œ์•„๊ฐˆ ๋•Œ ์ƒํƒœ
    k = ํšŒ์ „ ํšŸ์ˆ˜ ์ž…๋ ฅ
    command = ํšŒ์ „์‹œํ‚จ ๋ฐฉ๋ฒ• ์ž…๋ ฅ
    visited = ๋ฐฉ๋ฌธ ์—ฌ๋ถ€
    ex_command = [๋งž๋‹ฟ์€ ํ†ฑ๋‹ˆ์˜ ๊ทน์ด ๋‹ค๋ฅธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋ฒˆํ˜ธ, ๋Œ์•„๊ฐ€๋Š” ๋ฐฉํ–ฅ] ์ €์žฅ
  • command ์ˆœํ™˜ 
    = ex_command๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ( ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ๋” ์ด์ƒ ๋Œ์•„๊ฐ€์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ) -> ex_command ๋งจ ์•ž ๊ฐ’ pop -> ๋Œ์•„๊ฐ€์•ผ ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋Œ๋ฆผ -> ๊ฐ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๋งž๋‹ฟ์€ ๋ถ€๋ถ„์ด ๋‹ค๋ฅธ ๊ทน์ด๋ผ๋ฉด ex_command์— ๋„ฃ์–ด์คŒ
  • ์ ์ˆ˜ ๊ณ„์‚ฐ ๋ฐ ์ถœ๋ ฅ

# ๋งž๋‹ฟ์€ ํ†ฑ๋‹ˆ์˜ ๊ทน์ด ๋‹ค๋ฅด๋ฉด ๋งž๋‹ฟ์€ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ๋Œ์•„๊ฐ€์•ผ ํ•˜๊ณ , ๊ทธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ ๋งž๋‹ฟ์€ ํ†ฑ๋‹ˆ์˜ ๊ทน์ด ๋‹ค๋ฅด๋ฉด.... ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฐ˜๋ณต๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ temp_arr์„ ๋งŒ๋“ค์–ด ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ์ค‘์— ๋ฐ”๋กœ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค. 

 

# 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” 2๋ฒˆ์ด๋ž‘๋งŒ ๋งž๋‹ฟ์œผ๋ฏ€๋กœ 1๋ฒˆ์˜ 3๋ฒˆ ํ†ฑ๋‹ˆ - 2๋ฒˆ์˜ 7๋ฒˆ ํ†ฑ๋‹ˆ๋ฅผ ๋น„๊ตํ•ด์ค€๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 4๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” 3๋ฒˆ์ด๋ž‘๋งŒ ๋งž๋‹ฟ์œผ๋ฏ€๋กœ 4๋ฒˆ์˜ 7๋ฒˆ - 3๋ฒˆ์˜ 3๋ฒˆ์„ ๋น„๊ตํ•ด์ค€๋‹ค.

2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ 3๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” ์–‘ ์˜†์œผ๋กœ ๋งž๋‹ฟ์œผ๋ฏ€๋กœ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ ๋น„๊ตํ•ด์ค€๋‹ค.

 

 

โ“ ์ฒ˜์Œ์— ์™œ ํ‹€๋ ธ๋Š”๊ฐ€?

์™€์•…-! ๋‹ค ํ’€๊ณ  ์—ฌ๊ธฐ์„œ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค. ์ฃผ์–ด์ง„ ์˜ˆ์ œ๋ฅผ ๋‹ค ํ†ต๊ณผํ•ด์„œ ์ œ์ถœํ–ˆ๋”๋‹ˆ ๋ฐ”๋กœ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ๋–ด๋‹ค. ๋ฐ”๋กœ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๊ตฌํ˜„ ์ž์ฒด๊ฐ€ ํ‹€๋ฆฐ ์ค„ ์•Œ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์งˆ๋ฌธ๊ณผ ๋ฐ˜๋ ˆ๋ฅผ ๋‹ค ์ฐพ์•„๋ณด์•˜์ง€๋งŒ ํ‹€๋ฆฐ ๋ถ€๋ถ„์„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๋‹ค. ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ ex_command์— ํšŒ์ „ ๋ฐฉํ–ฅ์„ ํ•˜๋‚˜ ๋ฐ˜๋Œ€๋กœ ์ž…๋ ฅํ•˜์—ฌ ํ‹€๋ ธ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค. ^^

์ฃผ์–ด์ง„ ์˜ˆ์ œ์—์„œ๋Š” ๊ทธ ์ฝ”๋“œ๋ฅผ ์ง€๋‚˜๊ฐ€๋Š” ๋ถ€๋ถ„์ด ์—†์—ˆ๋‚˜ ๋ณด๋‹ค... ์˜ˆ์ œ ๋‹ค ํ†ต๊ณผํ•œ ๊ฑฐ ๋ณด๋‹ˆ... ์ฐพ์•„์„œ ๋‹คํ–‰์ด๋‹ค 

 


์ƒ๊ฐ๐Ÿค”

 

์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์ง€๋งŒ... ๋ฌธ์ œ ์ดํ•ด์™€ ํ†ต๊ณผํ•œ ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋‚ด ๋จธ๋ฆฌ๋Š” ์šฉ๋Ÿ‰ ์ดˆ๊ณผ์ด๋‹ค...