ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๋ก๋ด ์ฒญ์๊ธฐ์ ๋์ ๋ก์ง์ด ์ ํด์ ธ๊ณ , ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง ๋ ์ต๋ ๋ช ์นธ์ ์ฒญ์ํ ์ ์๋์ง ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ํด๋น ๋ฌธ์ ์์ ๋ก๋ด ์ฒญ์๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ํ๋ค.
- ํ์ฌ ์์น๋ฅผ ์ฒญ์ํ๋ค.
- ํ์ฌ ์์น์์ ํ์ฌ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ๋ฐฉํฅ๋ถํฐ ์ฐจ๋ก๋๋ก ํ์์ ์งํํ๋ค.
- ์ผ์ชฝ ๋ฐฉํฅ์ ์์ง ์ฒญ์ํ์ง ์์ ๊ณต๊ฐ์ด ์กด์ฌํ๋ค๋ฉด, ๊ทธ ๋ฐฉํฅ์ผ๋ก ํ์ ํ ๋ค์ ํ ์นธ์ ์ ์งํ๊ณ 1๋ฒ๋ถํฐ ์งํํ๋ค.
- ์ผ์ชฝ ๋ฐฉํฅ์ ์ฒญ์ํ ๊ณต๊ฐ์ด ์๋ค๋ฉด, ๊ทธ ๋ฐฉํฅ์ผ๋ก ํ์ ํ๊ณ 2๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
- ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ฒญ์๊ฐ ์ด๋ฏธ ๋์ด์๊ฑฐ๋ ๋ฒฝ์ธ ๊ฒฝ์ฐ์๋, ๋ฐ๋ผ๋ณด๋ ๋ฐฉํฅ์ ์ ์งํ ์ฑ๋ก ํ ์นธ ํ์ง์ ํ๊ณ 2๋ฒ์ผ๋ก ๋์๊ฐ๋ค.
- ๋ค ๋ฐฉํฅ ๋ชจ๋ ์ฒญ์๊ฐ ์ด๋ฏธ ๋์ด์๊ฑฐ๋ ๋ฒฝ์ด๋ฉด์, ๋ค์ชฝ ๋ฐฉํฅ์ด ๋ฒฝ์ด๋ผ ํ์ง๋ ํ ์ ์๋ ๊ฒฝ์ฐ์๋ ์๋์ ๋ฉ์ถ๋ค.
ํ ์ง์ ์ ๋ํด 2๋ฒ๊ณผ ๊ฐ์ ํ์ ๊ณผ์ ์ ๊ฑฐ์น ํ, DFS๋ก ๋ค์ ํธ์ถํ์์ ๋ ๋ ์ด์ ํ์์ด ์งํ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ผ๋ฉด ์ฒญ์ํ ์นธ์ ์ถ๋ ฅํ๊ณ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋๋ก ํ๋ค.
์ฝ๋
from sys import stdin
def dfs(cur_x, cur_y, cur_dir):
X, Y = 0, 1
global answer
dirs = ((-1, 0), (0, 1), (1, 0), (0, -1))
if graph[cur_x][cur_y] == 1:
print(answer)
exit()
for _ in range(4):
next_dir = (cur_dir + 3) % 4
next_x, next_y = cur_x + dirs[next_dir][X], cur_y + dirs[next_dir][Y]
if not graph[next_x][next_y]:
graph[next_x][next_y] = 2
answer += 1
dfs(next_x, next_y, next_dir)
return
cur_dir = next_dir
# ํ์ง ํ๋ ๊ฒฝ์ฐ
dfs(cur_x - dirs[cur_dir][X], cur_y - dirs[cur_dir][Y], cur_dir)
if __name__ == "__main__":
answer = 1
n, m = map(int, stdin.readline().split())
r, c, d = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().split())) for _ in range(n)]
graph[r][c] = 2
dfs(r, c, d)
์ต์ด์ ์์ฑํ ๋๋ ํ์ฌ ๋ฐฉํฅ์์ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋ณํ ํ ๋, L, R, U, D์ ๊ฐ์ ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ์ ์์ฑํ์๋ค. ํ์ง๋ง ๊ตณ์ด ๊ทธ๋ด ํ์ ์์ด ๋๋จธ์ง ์ฐ์ฐ์ ํ์ฉํ๋ฉด ๋์ฑ ์ฝ๊ฒ ๋ค์ ๋ฐฉํฅ์ ๊ตฌํ ์ ์๋ค.
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 1890 ์ ํ (0) | 2020.08.25 |
---|---|
๋ฐฑ์ค: 11048 ์ด๋ํ๊ธฐ (0) | 2020.08.25 |
๋ฐฑ์ค: 16954 ์์ง์ด๋ ๋ฏธ๋ก ํ์ถ (0) | 2020.08.24 |
๋ฐฑ์ค: 15558 ์ ํ ๊ฒ์ (0) | 2020.08.23 |
๋ฐฑ์ค: 2110 ๊ณต์ ๊ธฐ ์ค์น (0) | 2020.08.23 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ