๋ฌธ์
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฒญ์ํ๋ ์์ญ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋ ์ฅ์๋ 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๋ก ์ฃผ์ด์ง๋ค. ์ง๋์ ์ฒซ ํ, ๋ง์ง๋ง ํ, ์ฒซ ์ด, ๋ง์ง๋ง ์ด์ ์๋ ๋ชจ๋ ์นธ์ ๋ฒฝ์ด๋ค.
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์๋ ์นธ์ ์ํ๋ ํญ์ ๋น ์นธ์ด๋ค.
์ถ๋ ฅ
๋ก๋ด ์ฒญ์๊ธฐ๊ฐ ์ฒญ์ํ๋ ์นธ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
https://www.acmicpc.net/problem/14503
๐ก ํ์ด ๋ฐ ์ฝ๋
import sys
input = sys.stdin.readline
graph = []
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]
n, m = map(int, input().split())
r, c, d = map(int, input().split())
for _ in range(n):
graph.append(list(map(int, input().split())))
graph[r][c] = -1
count = 1
while graph[r][c] != 1:
temp = False
for _ in range(4):
d -= 1
if d == -1:
d = 3
nr = r + dr[d]
nc = c + dc[d]
if graph[nr][nc] == 0:
r = nr
c = nc
graph[r][c] = -1
count += 1
temp = True
break
if not temp:
r += dr[d-2]
c += dc[d-2]
print(count)
๋ก๋ด ์ฒญ์๊ธฐ๋ฅผ ์ผ์ชฝ์ผ๋ก ํ์ ์์ผ ๊ฐ๋ฉฐ ์ฒญ์ํ ๊ตฌ์ญ์ ์ฐพ๋๋ค. ํ์ ์ ๋ฐฉํฅ์ ๋ํ๋ด๋ d์์ -1์ ํด์ฃผ๋, d๊ฐ์ด ์์๊ฐ ๋๋ ๊ฒฝ์ฐ d๋ 3์ผ๋ก ๋์ฒด์์ผ ๋ถ(0)์์ ์(3)์ผ๋ก์ ์ด๋์ ํํํ๋ค.์ดํ, ํ์ ํ์ฌ ์ ์งํ์ ๊ฒฝ์ฐ์ r๊ณผ c๋ฅผ nr๊ณผ nc๋ก ์ก๊ณ graph[nr][nc]๊ฐ 0์ธ์ง๋ฅผ ํ์ธํ๋ฉด ๋๋ค. 0์ผ ๊ฒฝ์ฐ ํด๋น ์์น๋ก ์ด๋ํด์ผ ํ๋ฏ๋ก r๊ณผ c๋ฅผ ๊ฐ๊ฐ nr๊ณผ nc๋ก ๋์ฒดํ๋ฉด์ ์นด์ดํ ์ ํด์ค๋ค. ์ด๋ temp์ ๊ฐ๋ True๋ก ๋ฐ๊พธ์ด์ฃผ๋ฏ๋ก temp๊ฐ False์ผ ๋๋ ๋ค ๋ฐฉํฅ์ผ๋ก ๋ชจ๋ ํ์ ํด๋ ์ฒญ์ํ ๊ตฌ์ญ์ด ์์ ๊ฒฝ์ฐ์ด๋ค. ๋ฐ๋ผ์ d-2์ ๋ฐฉํฅ์ผ๋ก ๋ก๋ด์ฒญ์๊ธฐ๋ฅผ ์ด๋๋ง ์ํจ ํ ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋๋ค.
'Algorithm > ๐ Baekjoon Judge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 2212๋ฒ ์ผ์ - ํ์ด์ฌ(Python) (0) | 2022.01.10 |
---|---|
[BOJ] ๋ฐฑ์ค 15686๋ฒ ์นํจ ๋ฐฐ๋ฌ - ํ์ด์ฌ(Python) (0) | 2022.01.07 |
[BOJ] ๋ฐฑ์ค 17609๋ฒ ํ๋ฌธ - ํ์ด์ฌ(Python) (0) | 2021.12.31 |
[BOJ] ๋ฐฑ์ค 16400๋ฒ ์์ ํํ - ํ์ด์ฌ(Python) (0) | 2021.12.31 |
[BOJ] ๋ฐฑ์ค 2293๋ฒ ๋์ 1 - ํ์ด์ฌ(Python) (0) | 2021.12.31 |