๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[BAEKJOON python] 19236_์ฒญ์๋ ์์ด ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
์ฒญ์๋ ์์ด
4×4ํฌ๊ธฐ์ ๊ณต๊ฐ์ด ์๊ณ , ํฌ๊ธฐ๊ฐ 1×1์ธ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค
๊ณต๊ฐ์ ๊ฐ ์นธ์ (x, y)์ ๊ฐ์ด ํํํ๋ฉฐ, x๋ ํ์ ๋ฒํธ, y๋ ์ด์ ๋ฒํธ
ํ ์นธ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ํ ๋ง๋ฆฌ ์กด์ฌ
๋ฌผ๊ณ ๊ธฐ๋ ๋ฒํธ์ ๋ฐฉํฅ์ ๊ฐ์ง๊ณ ์๋ค
๋ฒํธ๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 16๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์
๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ฐ์ ๋ฒํธ๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ๋ ์๋ค
๋ฐฉํฅ์ 8๊ฐ์ง ๋ฐฉํฅ(์ํ์ข์ฐ, ๋๊ฐ์ ) ์ค ํ๋
์ฒญ์๋ ์์ด๊ฐ ์ด ๊ณต๊ฐ์ ๋ค์ด๊ฐ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ ค๊ณ ํ๋ค
์ฒญ์๋ ์์ด๋ (0, 0)์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๊ณ , (0, 0)์ ๋ค์ด๊ฐ๊ฒ ๋๋ค
์์ด์ ๋ฐฉํฅ์ (0, 0)์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ๋ฐฉํฅ๊ณผ ๊ฐ๋ค
์ดํ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ด๋ํ๋ค
1) ๋ฌผ๊ณ ๊ธฐ๋ ๋ฒํธ๊ฐ ์์ ๋ฌผ๊ณ ๊ธฐ๋ถํฐ ์์๋๋ก ์ด๋ํ๋ค
๋ฌผ๊ณ ๊ธฐ๋ ํ ์นธ์ ์ด๋
์ด๋ํ ์ ์๋ ์นธ์ ๋น ์นธ๊ณผ ๋ค๋ฅธ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ
์ด๋ํ ์ ์๋ ์นธ์ ์์ด๊ฐ ์๊ฑฐ๋, ๊ณต๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ๋๋ ์นธ
๊ฐ ๋ฌผ๊ณ ๊ธฐ๋ ๋ฐฉํฅ์ด ์ด๋ํ ์ ์๋ ์นธ์ ํฅํ ๋๊น์ง ๋ฐฉํฅ์ 45๋ ๋ฐ์๊ณ ํ์
์ด๋ํ ์ ์๋ ์นธ์ด ์์ผ๋ฉด ์ด๋์ ํ์ง ์๋๋ค
๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ค๋ฅธ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ ๋๋ ์๋ก์ ์์น๋ฅผ ๋ฐ๊พธ๋ ๋ฐฉ์์ผ๋ก ์ด๋
2) ๋ฌผ๊ณ ๊ธฐ์ ์ด๋์ด ๋ชจ๋ ๋๋๋ฉด ์์ด๊ฐ ์ด๋ํ๋ค
์์ด๋ ๋ฐฉํฅ์ ์๋ ์นธ์ผ๋ก ์ด๋ํ ์ ์๋๋ฐ, ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ์นธ์ ์ด๋ํ ์ ์๋ค
์์ด๊ฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ๋ค๋ฉด, ๊ทธ ์นธ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๊ณ , ๊ทธ ๋ฌผ๊ณ ๊ธฐ์ ๋ฐฉํฅ์ ๊ฐ์ง๊ฒ ๋๋ค
์ด๋ํ๋ ์ค์ ์ง๋๊ฐ๋ ์นธ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ ๋จน์ง ์๋๋ค.
๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก๋ ์ด๋ํ ์ ์๋ค
์์ด๊ฐ ์ด๋ํ ์ ์๋ ์นธ์ด ์์ผ๋ฉด ๊ณต๊ฐ์์ ๋ฒ์ด๋ ์ง์ผ๋ก ๊ฐ๋ค
์์ด๊ฐ ์ด๋ํ ํ์๋ ๋ค์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ด๋ํ๋ฉฐ, ์ดํ ์ด ๊ณผ์ ์ด ๊ณ์ํด์ ๋ฐ๋ณต
์์ด๊ฐ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ ๋ฒํธ์ ํฉ์ ์ต๋๊ฐ
์ฒซ์งธ ์ค๋ถํฐ 4๊ฐ์ ์ค์ ๊ฐ ์นธ์ ๋ค์ด์๋ ๋ฌผ๊ณ ๊ธฐ์ ์ ๋ณด
๋ฌผ๊ณ ๊ธฐ์ ์ ๋ณด๋ ๋ ์ ์ ai, bi
ai๋ ๋ฌผ๊ณ ๊ธฐ์ ๋ฒํธ, bi๋ ๋ฐฉํฅ (1๋ถํฐ ์์๋๋ก ↑, โ, ←, โ, ↓, โ, →, โ)
import copy
board = [[] for _ in range(4)]
# ๋ฌผ๊ณ ๊ธฐ ๋ฐฉํฅ 1๋ถํฐ ์์๋๋ก ↑, โ, ←, โ, ↓, โ, →, โ
dx = [-1, -1, 0, 1, 1, 1, 0, -1]
dy = [0, -1, -1, -1, 0, 1, 1, 1]
for i in range(4):
data = list(map(int, input().split()))
fish = []
# ๋ฌผ๊ณ ๊ธฐ ๋ฒํธ, ๋ฐฉํฅ
for j in range(4):
fish.append([data[2 * j],
data[2 * j + 1] - 1]) # ๋ฐฉํฅ์์ -1 ์ด์ ๋ : ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์์ด๋ผ ใ
# ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ค์ด์๋ ๋ฒํธ, ๋ฐฉํฅ์ ์ ์ฅ
board[i] = fish
# ์์ด๊ฐ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ ๋ฒํธ์ ํฉ์ ์ต๋๊ฐ
max_score = 0
def dfs(sx, sy, score, board):
global max_score
# ๋จน์ ๋ฌผ๊ณ ๊ธฐ์ ๋ฒํธ๋ก ์ ์๋ฅผ ๋ํด์ฃผ๊ณ
score += board[sx][sy][0]
# ์์ด๊ฐ ๋จน์ ๋ฌผ๊ณ ๊ธฐ ๋ฒํธ์ ํฉ์ ์ต๋๊ฐ์ ๊ฐฑ์
max_score = max(score, max_score)
board[sx][sy][0] = 0
# 1) ๋ฌผ๊ณ ๊ธฐ ์์ง์
for f in range(1, 17):
f_x, f_y = -1, -1
for x in range(4):
for y in range(4):
# 1๋ถํฐ 16๊น์ง ์ฐจ๋ก๋๋ก ๋ฌผ๊ณ ๊ธฐ ์ด๋
if board[x][y][0] == f:
f_x, f_y = x, y
break
if f_x == -1 and f_y == -1:
continue
# ๋ฌผ๊ณ ๊ธฐ ๋ฐฉํฅ
f_d = board[f_x][f_y][1]
for i in range(8):
# ๋ฐ์๊ณ๋ก 45๋์ฉ
nd = (f_d + i) % 8
nx = f_x + dx[nd]
ny = f_y + dy[nd]
# ๊ฒฉ์ํ์ ์ ๋์ด๊ฐ๊ณ , ์์ด์ ๊ฐ์ ์์น๋ผ๋ฉด ๊ณ์ ๋๋ ค~
if not (0 <= nx < 4 and 0 <= ny < 4) or (nx == sx and ny == sy):
continue
# ๋ฐฉํฅ ๊ฐฑ์
board[f_x][f_y][1] = nd
# ์ด๋ํ ์ ๋, ์ด๋ํ ์ ๋ ์์น ๋ฐ๊พธ๊ธฐ
board[f_x][f_y], board[nx][ny] = board[nx][ny], board[f_x][f_y]
break
# 2) ์์ด ์ด๋ -> ๋จน์
s_d = board[sx][sy][1] # ์์ด๊ฐ ์์นํ ๊ณณ = ๋ฌผ๊ณ ๊ธฐ ์์น (๋ฐฉํฅ)
for i in range(1, 5):
nx = sx + dx[s_d] * i
ny = sy + dy[s_d] * i
if (0 <= nx < 4 and 0 <= ny < 4) and board[nx][ny][0] > 0:
# ์์ด ์ด๋ํ ๋๋ง๋ค ์ต๋๊ฐ ๊ฐฑ์
dfs(nx, ny, score, copy.deepcopy(board))
dfs(0, 0, 0, board)
print(max_score)
์์ ์ ๋ ฅ
12 6 14 5 4 5 6 7
15 1 11 7 3 7 7 5
10 3 8 3 16 6 1 1
5 8 2 7 13 6 9 2
์์ ์ถ๋ ฅ
76

์ฌ๋ฐ๋๋ฐ?
์ ํผ์ ๋ชปํ ๊น ใ ใ ใ
์์ง. ๋ถ์ ๋ฐฉ๋ฒ์ด ์ด๋ ค์ ใ
https://developer-ellen.tistory.com/68
๊ฐ์ฌํฉ๋๋นใ ใ
728x90
๋ฐ์ํ
'๐ฆฅ ์ฝํ > BAEKJOON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON python] 21608_์์ด ์ด๋ฑํ๊ต (0) | 2023.04.08 |
---|---|
[BAEKJOON python] 19237_์ด๋ฅธ ์์ด (0) | 2023.04.08 |
[BAEKJOON python] 16236_์๊ธฐ์์ด (0) | 2023.04.08 |
[BAEKJOON python] 20055_์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด (0) | 2023.04.08 |
[BAEKJOON python] 19238_์คํํธ ํ์ (0) | 2023.04.08 |
Comments