ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
4x4 ํฌ๊ธฐ์ ๋ฌผ๊ณ ๊ธฐ๋ค์ด ์๊ณ , ์์ด๋ `(0, 0)` ๋ถํฐ ์์ํ์ฌ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน๋๋ค. ์์ด๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ผ๋ฉด ๊ทธ ๋ฌผ๊ณ ๊ธฐ์ ๋ฐฉํฅ์ ๋ฐ๋ผ์ ์์ง์ผ ์ ์์ผ๋ฉฐ ํด๋น ๋ฐฉํฅ์ ๋ชจ๋ ์นธ์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ์์ด๊ฐ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ ํ์ ๋ฌผ๊ณ ๊ธฐ๋ค์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ํ๋ค.
- ๋ฌผ๊ณ ๊ธฐ๋ ํ ์นธ์ฉ ์ด๋ํ ์ ์๋ค.
- ์ด๋ํ ์ ์๋ ์นธ์ 4x4 ํฌ๊ธฐ๋ฅผ ๋ฒ์ด๋๋ ์์ญ์ด๊ฑฐ๋, ์์ด์ ์์น๊ฐ ์๋ ์์ญ์ด๋ค.
- ์ด๋ํ ์ ์์ ๋ ๊น์ง, ๋ฐฉํฅ์ 45๋๋ก ํ์ ํ์ฌ ์ ๊ทผ ๊ฐ๋ฅํ ๊ณณ์ ์ ๊ทผํ๋ค.
- ์ ๊ทผ ๊ฐ๋ฅํ ๊ณณ์ ๋ฌผ๊ณ ๊ธฐ์ ์๋ฆฌ๋ฅผ ์ ํํ๋ค.
์ฆ ๋ฌธ์ ๋ ์์ด๊ฐ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๊ณ , ๋ฌผ๊ณ ๊ธฐ๋ค์ ์ด๋์ํค๋ ๊ณผ์ ์ ์์ฐจ์ ์ผ๋ก ๋ฐ๋ณต์ํค๋ฉด ๋๋ค. ๋ฌธ์ ๋ฅผ ํ ๋ ์ค๊ณ๋ฅผ ์ํ๊ณ ํผ๋ค๋ฉด ์ด๋ ต์ง ์๊ฒ ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
์ฝ๋
from sys import stdin
from copy import deepcopy
def visitable(x, y):
return 0 <= x < 4 and 0 <= y < 4
def find_fish(cur_graph, fish_num):
for x in range(4):
for y in range(4):
if cur_graph[x][y][FISH] == fish_num:
return [x, y]
return False
def dfs(sx, sy, eat, cur_graph):
global answer
# ํ์ฌ ์์ด๊ฐ ์๋ ์์น์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์.
eat += cur_graph[sx][sy][FISH]
cur_graph[sx][sy][FISH] = 0
# 1๋ฒ๋ถํฐ 16๋ฒ๊น์ง ์์ฐจ์ ์ผ๋ก ์ด๋๊ฐ๋ฅํ์ง ํ์ธ.
for fish_num in range(1, 17):
loc = find_fish(cur_graph, fish_num)
if not loc:
continue
fx, fy = loc[X], loc[Y]
fish_dir = cur_graph[fx][fy][DIR]
for z in range(8):
# 45๋์ฉ ๋ฐฉํฅ์ ์ ํํด๊ฐ๋ฉฐ ์ ๊ทผํ๋๋ก ํ๊ธฐ ์ํจ.
next_dir = (fish_dir + z) % 8
dx, dy = dirs[next_dir]
fnx, fny = fx + dx, fy + dy
# 4x4 ์์ญ์ ๋ฐ์ด๊ณ , ์์ด์ ์์น์ ๋์ผํ๋ค๋ฉด ์ด๋ ๋ถ๊ฐ!
if not visitable(fnx, fny) or (fnx, fny) == (sx, sy):
continue
# ํ์ฌ ๋ฌผ๊ณ ๊ธฐ์ ๋ฐฉํฅ์ ์ ๊ทผ๊ฐ๋ฅํ ๋ฐฉํฅ์ผ๋ก ๋ณ๊ฒฝ.
cur_graph[fx][fy][DIR] = next_dir
# ์ ๊ทผ ๊ฐ๋ฅํ ๋ฌผ๊ณ ๊ธฐ์ ์ค์์นํจ.
cur_graph[fx][fy], cur_graph[fnx][fny] = cur_graph[fnx][fny], cur_graph[fx][fy]
break
answer = max(answer, eat)
shark_dir = cur_graph[sx][sy][DIR]
# ํ์ฌ ์์ด์ ๋ฐฉํฅ์์ ์ต๋ 3์นธ ์์ผ๋ก ๊ฐ ์ ์์.
for delta in range(1, 4):
dx, dy = dirs[shark_dir]
next_x, next_y = sx + dx * delta, sy + dy * delta
if visitable(next_x, next_y) and cur_graph[next_x][next_y][FISH] > 0:
dfs(next_x, next_y, eat, deepcopy(cur_graph))
if __name__ == "__main__":
X, Y = 0, 1
FISH, DIR = 0, 1
answer = 0
dirs = ((-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (1, 1), (0, 1), (-1, 1))
graph = [[[]] * 4 for _ in range(4)]
for i in range(4):
info = list(map(int, stdin.readline().split()))
for j in range(4):
graph[i][j] = [info[j * 2], info[j * 2 + 1] - 1]
dfs(0, 0, 0, graph)
print(answer)
๋ฐฉํฅ์ ํ์ ํ๊ธฐ ์ํด์๋ `%` (๋ชจ๋๋ฌ)๋ฅผ ํ์ฉํ๋ฉด ์ฝ๊ฒ ์ ํํ ์ ์๊ณ , ์ ํ ์กฐ๊ฑด์ ๋ง์ถฐ ๋ก์ง์ ์์ฑํ๋ฉด `๋ง์์ต๋๋ค!` ๋ฅผ ๋ณผ ์ ์๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 17143 ๋์์ (0) | 2020.10.15 |
---|---|
๋ฐฑ์ค: 16235 ๋๋ฌด ์ฌํ ํฌ (0) | 2020.10.14 |
๋ฐฑ์ค: 16236 ์๊ธฐ ์์ด (0) | 2020.10.12 |
๋ฐฑ์ค: 17089 ์ธ ์น๊ตฌ (0) | 2020.10.10 |
๋ฐฑ์ค: 16943 ์ซ์ ์ฌ๋ฐฐ์น (2) | 2020.10.10 |