[BOJ][๐ก5][๋ฐฑ์ค#14503] ๋ก๋ด ์ฒญ์๊ธฐ
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฒญ์ํ๋ ์์ญ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋ ์ฅ์๋ NรM ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ผ๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ, 1ร1ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ๊ฐ๊ฐ์ ์นธ์ ๋ฒฝ ๋๋ ๋น ์นธ์ด๋ค. ์ฒญ์๊ธฐ๋ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ด ์์ผ๋ฉฐ, ์ด ๋ฐฉํฅ์ ๋, ์, ๋จ, ๋ถ์ค ํ๋์ด๋ค. ์ง๋์ ๊ฐ ์นธ์ (r, c)๋ก ๋ํ๋ผ ์ ์๊ณ , r์ ๋ถ์ชฝ์ผ๋ก๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์, c๋ ์์ชฝ์ผ๋ก ๋ถํฐ ๋จ์ด์ง ์นธ์ ๊ฐ์์ด๋ค. ๋ก๋ด ์ฒญ์๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ํ๋ค.
ํ์ฌ ์์น๋ฅผ ์ฒญ์ํ๋ค. ํ์ฌ ์์น์์ ํ์ฌ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ๋ฐฉํฅ๋ถํฐ ์ฐจ๋ก๋๋ก ์ธ์ ํ ์นธ์ ํ์ํ๋ค.
์ผ์ชฝ ๋ฐฉํฅ์ ์์ง ์ฒญ์ํ์ง ์์ ๊ณต๊ฐ์ด ์กด์ฌํ๋ค๋ฉด, ๊ทธ ๋ฐฉํฅ์ผ๋ก ํ์ ํ ๋ค์ ํ ์นธ์ ์ ์งํ๊ณ 1๋ฒ๋ถํฐ ์งํํ๋ค. ์ผ์ชฝ ๋ฐฉํฅ์ ์ฒญ์ํ ๊ณต๊ฐ์ด ์๋ค๋ฉด, ๊ทธ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๊ณ 2๋ฒ์ผ๋ก ๋์๊ฐ๋ค. ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ฒญ์๊ฐ ์ด๋ฏธ ๋์ด์๊ฑฐ๋ ๋ฒฝ์ธ ๊ฒฝ์ฐ์๋, ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ ์ฑ๋ก ํ ์นธ ํ์ง์ ํ๊ณ 2๋ฒ์ผ๋ก ๋์๊ฐ๋ค. ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ฒญ์๊ฐ ์ด๋ฏธ ๋์ด์๊ฑฐ๋ ๋ฒฝ์ด๋ฉด์, ๋ค์ชฝ ๋ฐฉํฅ์ด ๋ฒฝ์ด๋ผ ํ์ง๋ ํ ์ ์๋ ๊ฒฝ์ฐ์๋ ์๋์ ๋ฉ์ถ๋ค.
๋ก๋ด ์ฒญ์๊ธฐ๋ ์ด๋ฏธ ์ฒญ์๋์ด์๋ ์นธ์ ๋ ์ฒญ์ํ์ง ์์ผ๋ฉฐ, ๋ฒฝ์ ํต๊ณผํ ์ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (3 โค N, M โค 50) ๋์งธ ์ค์ ๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋ ์นธ์ ์ขํ (r, c)์ ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ d๊ฐ ์ฃผ์ด์ง๋ค. d๊ฐ 0์ธ ๊ฒฝ์ฐ์๋ ๋ถ์ชฝ์, 1์ธ ๊ฒฝ์ฐ์๋ ๋์ชฝ์, 2์ธ ๊ฒฝ์ฐ์๋ ๋จ์ชฝ์, 3์ธ ๊ฒฝ์ฐ์๋ ์์ชฝ์ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๊ฒ์ด๋ค. ์ ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ฅ์์ ์ํ๊ฐ ๋ถ์ชฝ๋ถํฐ ๋จ์ชฝ ์์๋๋ก, ๊ฐ ์ค์ ์์ชฝ๋ถํฐ ๋์ชฝ ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋น ์นธ์ 0, ๋ฒฝ์ 1๋ก ์ฃผ์ด์ง๋ค. ์ง๋์ ์ฒซ ํ, ๋ง์ง๋ง ํ, ์ฒซ ์ด, ๋ง์ง๋ง ์ด์ ์๋ ๋ชจ๋ ์นธ์ ๋ฒฝ์ด๋ค. ๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋ ์นธ์ ์ํ๋ ํญ์ ๋น ์นธ์ด๋ค.
์ถ๋ ฅ
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์ฒญ์ํ๋ ์นธ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
3 3
1 1 0
1 1 1
1 0 1
1 1 1
์ถ๋ ฅ
1
์์ 2
์ ๋ ฅ
11 10
7 4 0
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 1 1 1 1 0 1
1 0 0 1 1 0 0 0 0 1
1 0 1 1 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 1 1 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
์ถ๋ ฅ
57
My Sol
import sys; input = sys.stdin.readline
search = {
0: [0, -1],
1: [-1, 0],
2: [0, 1],
3: [1, 0]
}
back = {
0: [1, 0],
1: [0, -1],
2: [-1, 0],
3: [0, 1]
}
def turn(i, nd):
global search
global ni, nj
if i == 4:
return -1
di, dj = search[nd%4]
if mat[ni+di][nj+dj]==0:
return nd%4
else:
return turn(i+1, nd-1)
H, W = map(int, input().split())
ni, nj, nd = map(int, input().split())
mat = [list(map(int, input().split())) for _ in range(H)]
mat[ni][nj] = 2
cnt = 1
ON = 1
while ON:
# ์ฌ๋ฐฉ ํ์ธ
pd = turn(0, nd)
# ์ฌ๋ฐฉ์ 0์ด ์๋ค.
if pd < 0:
bi, bj = back[nd%4]
# ํ์งํ๋ ๊ณณ์ด ๋ฒฝ
if mat[ni+bi][nj+bj]==1:
ON = 0
else:
ni += bi
nj += bj
# ํ ๋ฐฉํฅ์ 0์ด ์๋ค.
else:
nd = pd
di, dj = search[nd%4]
ni += di
nj += dj
mat[ni][nj] = 2
cnt += 1
nd -= 1
print(cnt)
๊ฒฝ์ฐ๋ฅผ ๋๋์ด์ฃผ๋ ๊ฒ์ด ๋ค์ ๋ฒ๊ฑฐ๋ก์ ์ง๋ง ๋ฌธ์ ์์ฒด๋ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง๋ง์ ์์๋ ๋ฌธ์ ์๋ค. ํ์ฌ ์ขํ์ ๋ฐฉํฅ, ๋งต์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ํ์์ ๋ง๊ฒ ์ถ๋ ฅํด์ฃผ๊ณ , ๊ฒฝ์ฐ๋ฅผ ๋๋์ด ๋ฐ๋ณตํด์ค๋ค. ๋ฐฉํฅ์ด ์์๋๋ก ์์ด์ mod๋ฅผ ์ด์ฉํด ์ฒญ์๊ธฐ๋ฅผ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ๋๋ ธ์ผ๋ฉฐ, dictionary๋ฅผ ์ด์ฉํ์ฌ ํด๋น ๋ฐฉํฅ์์ ์ผ์ชฝ์ ๋ธํ ์ขํ๋ฅผ ๊ณ์ฐํ์๋ค.
dfs๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ๋ผ๋ฉด 4๋ฐฉํฅ ๋ชจ๋๋ฅผ ์กฐํํด์ ์ ์๋ฆฌ๋ก ๋์์์ ๋์๋ ์ฌ๋ฐฉ์ ๋ ์กฐํํ ํ์๊ฐ ์์ผ๋ฏ๋ก ํ์ถํ๊ธฐ ์ํด dfs๋ฅผ ์ฌ์ฉํ์๊ณ , ์ด๋ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋น ์นธ์ ์ผ์ชฝ์ผ๋ก ๋๋ ๋ฐฉํฅ์ returnํ์ง๋ง 4๋ฐฉํฅ ๋ชจ๋ 0์ด ์๋๋ผ๋ฉด -1์ ์กฐํํด ์ด๋ฅผ ํตํด ํ๋จํ ์ ์๋๋ก ํ์๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ