๋ฌธ์ (์ถ์ฒ: 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์ ํ์ ๋ฐฉํฅ์ ํ๋ ๋ฐ๋๋ก ์ ๋ ฅํ์ฌ ํ๋ ธ๋ ๊ฒ์ด์๋ค. ^^
์ฃผ์ด์ง ์์ ์์๋ ๊ทธ ์ฝ๋๋ฅผ ์ง๋๊ฐ๋ ๋ถ๋ถ์ด ์์๋ ๋ณด๋ค... ์์ ๋ค ํต๊ณผํ ๊ฑฐ ๋ณด๋... ์ฐพ์์ ๋คํ์ด๋ค
์๊ฐ๐ค
์ฝ๋๊ฐ ๋๋ฌด ๊ธธ๋ค๋ ์๊ฐ์ด ๋ค์ง๋ง... ๋ฌธ์ ์ดํด์ ํต๊ณผํ ๊ฒ๋ง์ผ๋ก๋ ๋ด ๋จธ๋ฆฌ๋ ์ฉ๋ ์ด๊ณผ์ด๋ค...
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 17086_์๊ธฐ ์์ด 2 (0) | 2022.05.20 |
---|---|
[Baekjoon] 21610_๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ (0) | 2022.05.16 |
[Baekjoon] 23288_์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ 2 (0) | 2022.05.11 |
[Baekjoon] 14499_์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2022.05.09 |
[Baekjoon] 14503_๋ก๋ด ์ฒญ์๊ธฐ (0) | 2022.05.05 |