λ¬Έμ
λ°±μ€ μ¨λΌμΈ μ μ§ - 14620λ²
νμ΄ κ³Όμ
λ°±νΈλνΉ
μ μ΄μ©ν νμ λ¬Έμ μ
λλ€.
μ΄ 3κ°μ μ¨μμ μ¬μ μ μμΌλ©° νΉμ μ¨μμ μ¬μ κ²½μ° λ¬Έμ μμ μ μλ μΈμ ν μμΉμλ μ¨μμ μ¬μ μ μμ΅λλ€.
λ¬Έμ μμ μμ λͺ¨μμΌλ‘ κ½μ΄ νΌκΈ° λλ¬Έμ (1, 1)
λΆν° μμν΄μ (N - 1, N - 1)
κΉμ§λ§
νμμ μννλ©΄ λλ€λ κ²μ μ μ μμ΅λλ€.
κ° κ²©μμ μΉΈλ€μ μ΄μ©ν΄μ κ°λ₯ν λͺ¨λ μ‘°ν©μ λ§λ€μ΄λ³΄λ©΄ λλλ°
μ΄λ ν΄λΉ μμΉμ μ¨μμ μ¬μ μ μλμ§ νλ¨νλ ν¨μλ₯Ό νλ μ μν΄μ ꡬνν©λλ€.
νμν λ μ£Όμν μ μ λ€μ μμΉλΆν° νμνκΈ° μν΄ (x, y)
κ°μ μ¬κ·μ μΌλ‘ λ겨주λλ°,
μ΄λ y
κ° λμ λλ¬ν κ²½μ°(N - 2
) λ€μ y
μΆ νμ μμ μ§μ μ 0μΌλ‘ μ΄κΈ°ν μμΌμ£Όμ΄μΌ νλ€λ μ μ
λλ€.
μ½λ
import sys
N = int(input())
board = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
dx = [1, -1, 0, 0, 0]
dy = [0, 0, 1, -1, 0]
def acc_flower(visit):
acc = 0
for x in range(N):
for y in range(N):
if visit[x][y]:
acc += board[x][y]
return acc
def is_acceptable(visit, x, y):
for i in range(5):
nx, ny = x + dx[i], y + dy[i]
if visit[nx][ny]:
return False
return True
def set_flower(visit, x, y, val):
for i in range(5):
nx, ny = x + dx[i], y + dy[i]
visit[nx][ny] = val
def dfs(visit, x, y, seed):
if not seed:
acc = acc_flower(visit)
return acc
ret = sys.maxsize
for nx in range(x, N - 1):
for ny in range(y, N - 1):
if is_acceptable(visit, nx, ny):
set_flower(visit, nx, ny, 1)
ret = min(ret, dfs(visit, nx, ny, seed - 1))
set_flower(visit, nx, ny, 0)
# yμΆμ΄ λμ λλ¬νλ©΄ 1λ‘ μ΄κΈ°ν
if ny == N - 2:
y = 1
return ret
def solution():
answer = sys.maxsize
for x in range(1, N - 1):
for y in range(1, N - 1):
visit = [[0] * N for _ in range(N)]
set_flower(visit, x, y, 1)
answer = min(answer, dfs(visit, x, y, 2))
set_flower(visit, x, y, 0)
return answer
print(solution())
'π algorithm > boj' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
BOJ 13164 - ν볡 μ μΉμ (0) | 2021.03.14 |
---|---|
BOJ 3109 - λΉ΅μ§ (0) | 2021.03.14 |
BOJ 2688 - μ€μ΄λ€μ§ μμ (0) | 2021.03.14 |
BOJ 16472 - κ³ λ₯μ΄ (0) | 2021.03.14 |
BOJ 17086 - μκΈ° μμ΄2 (0) | 2021.03.08 |
π¬ λκΈ