๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/23288)
<์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ 2>
๋ฌธ์
ํฌ๊ธฐ๊ฐ N×M์ธ ์ง๋๊ฐ ์กด์ฌํ๋ค. ์ง๋์ ์ค๋ฅธ์ชฝ์ ๋์ชฝ, ์์ชฝ์ ๋ถ์ชฝ์ด๋ค. ์ง๋์ ์ขํ๋ (r, c)๋ก ๋ํ๋ด๋ฉฐ, r๋ ๋ถ์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์, c๋ ์์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์์ด๋ค. ๊ฐ์ฅ ์ผ์ชฝ ์์ ์๋ ์นธ์ ์ขํ๋ (1, 1)์ด๊ณ , ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋์ ์๋ ์นธ์ ์ขํ๋ (N, M)์ด๋ค. ์ด ์ง๋์ ์์ ์ฃผ์ฌ์๊ฐ ํ๋ ๋์ฌ์ ธ ์์ผ๋ฉฐ, ์ฃผ์ฌ์์ ๊ฐ ๋ฉด์๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 6๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์๊ฐ ํ๋์ฉ ์๋ค. ์ฃผ์ฌ์ ํ ๋ฉด์ ํฌ๊ธฐ์ ์ง๋ ํ ์นธ์ ํฌ๊ธฐ๋ ๊ฐ๊ณ , ์ฃผ์ฌ์์ ์ ๊ฐ๋๋ ์๋์ ๊ฐ๋ค.
2
4 1 3
5
6
์ฃผ์ฌ์๋ ์ง๋ ์์ ์ ๋ฉด์ด 1์ด๊ณ , ๋์ชฝ์ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ด 3์ธ ์ํ๋ก ๋์ฌ์ ธ ์์ผ๋ฉฐ, ๋์ฌ์ ธ ์๋ ๊ณณ์ ์ขํ๋ (1, 1)์ด๋ค. ์ง๋์ ๊ฐ ์นธ์๋ ์ ์๊ฐ ํ๋์ฉ ์๋ค. ๊ฐ์ฅ ์ฒ์์ ์ฃผ์ฌ์์ ์ด๋ ๋ฐฉํฅ์ ๋์ชฝ์ด๋ค. ์ฃผ์ฌ์์ ์ด๋ ํ ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
1. ์ฃผ์ฌ์๊ฐ ์ด๋ ๋ฐฉํฅ์ผ๋ก ํ ์นธ ๊ตด๋ฌ๊ฐ๋ค. ๋ง์ฝ, ์ด๋ ๋ฐฉํฅ์ ์นธ์ด ์๋ค๋ฉด, ์ด๋ ๋ฐฉํฅ์ ๋ฐ๋๋ก ํ ๋ค์ ํ ์นธ ๊ตด๋ฌ๊ฐ๋ค.
2. ์ฃผ์ฌ์๊ฐ ๋์ฐฉํ ์นธ (x, y)์ ๋ํ ์ ์๋ฅผ ํ๋ํ๋ค.
3. ์ฃผ์ฌ์์ ์๋ซ๋ฉด์ ์๋ ์ ์ A์ ์ฃผ์ฌ์๊ฐ ์๋ ์นธ (x, y)์ ์๋ ์ ์ B๋ฅผ ๋น๊ตํด ์ด๋ ๋ฐฉํฅ์ ๊ฒฐ์ ํ๋ค.
A > B์ธ ๊ฒฝ์ฐ ์ด๋ ๋ฐฉํฅ์ 90๋ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํจ๋ค.
A < B์ธ ๊ฒฝ์ฐ ์ด๋ ๋ฐฉํฅ์ 90๋ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํจ๋ค.
A = B์ธ ๊ฒฝ์ฐ ์ด๋ ๋ฐฉํฅ์ ๋ณํ๋ ์๋ค.
์นธ (x, y)์ ๋ํ ์ ์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ ์ ์๋ค. (x, y)์ ์๋ ์ ์๋ฅผ B๋ผ๊ณ ํ์ ๋, (x, y)์์ ๋์๋จ๋ถ ๋ฐฉํฅ์ผ๋ก ์ฐ์ํด์ ์ด๋ํ ์ ์๋ ์นธ์ ์ C๋ฅผ ๋ชจ๋ ๊ตฌํ๋ค. ์ด๋ ์ด๋ํ ์ ์๋ ์นธ์๋ ๋ชจ๋ ์ ์ B๊ฐ ์์ด์ผ ํ๋ค. ์ฌ๊ธฐ์ ์ ์๋ B์ C๋ฅผ ๊ณฑํ ๊ฐ์ด๋ค.
๋ณด๋์ ํฌ๊ธฐ์ ๊ฐ ์นธ์ ์๋ ์ ์, ์ฃผ์ฌ์์ ์ด๋ ํ์ K๊ฐ ์ฃผ์ด์ก์ ๋, ๊ฐ ์ด๋์์ ํ๋ํ๋ ์ ์์ ํฉ์ ๊ตฌํด๋ณด์.
์ด ๋ฌธ์ ์ ์์ 1๋ถํฐ 7์ ๊ฐ์ ์ง๋์์ ์ด๋ํ๋ ํ์๋ง ์ฆ๊ฐ์ํค๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์์ 8์ ๊ฐ์ ์ง๋์์ ์ด๋ํ๋ ํ์๋ฅผ ๋งค์ฐ ํฌ๊ฒ ๋ง๋ค์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋์ ์ธ๋ก ํฌ๊ธฐ N, ๊ฐ๋ก ํฌ๊ธฐ M (2 ≤ N, M ≤ 20), ๊ทธ๋ฆฌ๊ณ ์ด๋ํ๋ ํ์ K (1 ≤ K ≤ 1,000)๊ฐ ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋์ ์ฐ์ฌ ์๋ ์๊ฐ ๋ถ์ชฝ๋ถํฐ ๋จ์ชฝ์ผ๋ก, ๊ฐ ์ค์ ์์ชฝ๋ถํฐ ๋์ชฝ ์์๋๋ก ์ฃผ์ด์ง๋ค. ์ง๋์ ๊ฐ ์นธ์ ์ฐ์ฌ ์๋ ์๋ 10 ๋ฏธ๋ง์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฐ ์ด๋์์ ํ๋ํ๋ ์ ์์ ํฉ์ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution (Python)
import sys
from collections import deque
def throw_dice(a,b,c,d,e,f):
temp=[0,0,0,0,0,0]
temp[0]=dice[a]
temp[1]=dice[b]
temp[2]=dice[c]
temp[3]=dice[d]
temp[4]=dice[e]
temp[5]=dice[f]
return temp
def change_direction(num, A, B):
if A>B: # ์๊ณ ๋ฐฉํฅ
num+=1
if num>3:
num=0
elif A<B: # ๋ฐ์๊ณ ๋ฐฉํฅ
num-=1
if num<0:
num=3
return num
def get_score(arr, start):
c=1
dx=[-1,1,0,0]
dy=[0,0,-1,1]
queue=deque([start])
visited=[[0]*len(arr[0]) for i in range(len(arr))] # ๋ฐฉ๋ฌธ ์ฌ๋ถ
visited[start[0]][start[1]]=1
while queue:
temp=queue.popleft()
for i in range(4):
x=temp[0]+dx[i]
y=temp[1]+dy[i]
if 0<=x<len(arr) and 0<=y<len(arr[0]):
if arr[x][y]==arr[temp[0]][temp[1]] and visited[x][y]==0:
queue.append([x,y])
visited[x][y]=1
c+=1
return c
if __name__=='__main__':
n,m,k=map(int,sys.stdin.readline().split()) # ์ธ๋ก, ๊ฐ๋ก, ์ด๋ํ๋ ํ์
arr=[]
for i in range(n): # ์ง๋
arr.append(list(map(int,sys.stdin.readline().split())))
dice=[2,1,5,6,4,3]
direction=1 # 0 = ๋ถ, 1= ๋, 2= ๋จ, 3= ์
x=0 # ์ขํ
y=0
cnt=0 # ์ด๋ํ ํ์
result=0
while cnt<k:
flag = False
if direction==0: # ๋ถ
if x-1>=0:
flag=True
x-=1
dice=throw_dice(1,2,3,0,4,5)
else:
direction=2
elif direction==1: # ๋
if y+1<m:
flag = True
y+=1
dice=throw_dice(0,4,2,5,3,1)
else:
direction=3
elif direction==2: # ๋จ
if x+1<n:
flag = True
x+=1
dice=throw_dice(3,0,1,2,4,5)
else:
direction=0
else: # ์
if y-1>=0:
flag = True
y-=1
dice=throw_dice(0,5,2,4,1,3)
else:
direction=1
if flag==True:
result+=(get_score(arr, [x,y]) * arr[x][y]) # ์ ์
direction = change_direction(direction, dice[3], arr[x][y]) # ๋ฐฉํฅ ๊ฒฐ์
cnt += 1
print(result)
1) ์ฃผ์ฌ์ ์ ๊ฐ๋ -> ๋ฆฌ์คํธ๋ก ์ ์ฅ
2) ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋
์ฃผ์ฌ์๋ฅผ ๋์๋จ๋ถ ๋ฐฉํฅ์ผ๋ก ๊ตด๋ ค์ผ ํ๋ฏ๋ก, ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋ ๋ฆฌ์คํธ ๊ฐ์ด ๋ณํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
* ํ์ดํ ๋ฐฉํฅ ์ฃผ์
3) direction ์ค์
0 = ๋ถ
1 = ๋
2 = ๋จ
3 = ์
๋ก ์ค์ ํ์ฌ 90๋ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ ๊ฒฝ์ฐ +1, 90๋ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํ ๊ฒฝ์ฐ -1๋ก ๋ฐฉํฅ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ํด์คฌ๋ค.
- throw_dice
: ๊ฐ ๋ฐฉํฅ์ผ๋ก ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ธ์ ๋ ์ฃผ์ฌ์ ์ ๊ฐ๋๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ํจ์ - change_direction ( ๋ฐฉํฅ, ์ฃผ์ฌ์ ์๋ซ๋ฉด, ์ฃผ์ฌ์๊ฐ ์๋ ์นธ)
: ์ฃผ์ฌ์ ์๋ซ๋ฉด > ์ฃผ์ฌ์ ์๋ ์นธ = ์๊ณ ๋ฐฉํฅ
: ์ฃผ์ฌ์ ์๋ซ๋ฉด < ์ฃผ์ฌ์ ์๋ ์นธ = ๋ฐ์๊ณ ๋ฐฉํฅ - get_score ( ์ง๋, ์์ ์ขํ )
: c = ์ด๋ํ ์ ์๋ ์นธ์ ์
: visited = ๋ฐฉ๋ฌธ ์ฌ๋ถ
: queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต -> queue์์ ์ขํ๋ฅผ ๊บผ๋ธ ํ ์ํ์ข์ฐ๋ฅผ ํ์ํ์ฌ ๊ทธ ์นธ์ ๊ฐ๊ณผ ์ด๋ํ ์นธ์ ๊ฐ์ด ๊ฐ์ผ๋ฉฐ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด queue์ ์ ์ฅ ๋ฐ ๋ฐฉ๋ฌธ ํ์, ์ด๋ํ ์ ์๋ ์นธ์ ์ +1 - Main
: ์ง๋์ ์ธ๋ก, ๊ฐ๋ก, ์ด๋ํ๋ ํ์ ์ ๋ ฅ
: arr (์ง๋) ์ ๋ณด ์ ๋ ฅ
: dice = ์ฃผ์ฌ์ ์ ๊ฐ๋ ์ ๋ณด ์ ์ฅ
: direction = ๋ฐฉํฅ ์ ์ฅ ( 0 = ๋ถ, 1 = ๋, 2 = ๋จ, 3 = ์ )
: x, y = ์ขํ , cnt = ์ด๋ํ ํ์, result = ์ ์
: ์ด๋ํ ํ์๊ฐ ์ด๋ํ๋ ํ์๋ณด๋ค ์์ผ๋ฉด ๊ณ์ํด์ ๋ฐ๋ณต -> ๋ฐฉํฅ๋๋ก ์์ง์ผ ์ขํ๋ฅผ ๊ตฌํ ํ ์ง๋ ๋ฒ์ ์์ด๋ผ๋ฉด ์ขํ ์ด๋ ๋ฐ ๊ตด๋ฆฐ ์ฃผ์ฌ์ ์ ๊ฐ๋ ์ ์ฅ ํ ์ ์, ๋ค์ ๋ฐฉํฅ ๊ตฌํ๊ธฐ, cnt+1, but ์ง๋ ๋ฒ์ ๋ฐ์ด๋ผ๋ฉด ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ์ ์ฅ (์ด๋ ๋ฐฉํฅ์ ์นธ์ด ์๋ค๋ฉด ๋ฐ๋๋ก ํ ๋ค์ ํ ์นธ ๊ตด๋ฌ๊ฐ์ผ ํ๋ฏ๋ก ์ง๋ ๋ฒ์ ๋ฐ์ด๋ผ๋ฉด cnt+1์ ์ ํด์ค์ผ๋ก์จ ํ ์นธ ๊ตด๋ฌ๊ฐ๋๋ก ํด์ค๋ค.)
์๊ฐ๐ค
๋ฌธ์ ์ ๋ด์ฉ์ ์ ์ ๋ฆฌํด์ ๊ทธ๋๋ก ๊ตฌํํ๋ฉด ํด๊ฒฐํ ์ ์์๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 21610_๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ (0) | 2022.05.16 |
---|---|
[Baekjoon] 14891_ํฑ๋๋ฐํด (0) | 2022.05.12 |
[Baekjoon] 14499_์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2022.05.09 |
[Baekjoon] 14503_๋ก๋ด ์ฒญ์๊ธฐ (0) | 2022.05.05 |
[Baekjoon] 2638_์น์ฆ (0) | 2022.04.27 |