문제
https://www.acmicpc.net/problem/14620
풀이
import sys
n = int(input())
arr = [list(map(int,sys.stdin.readline().strip().split())) for _ in range(n)]
dx = [1,0,-1,0]
dy = [0,1,0,-1]
visited = [[False]*n for _ in range(n)]
sol = 201*n*n
def flower(cnt,c):
global sol
if cnt==3: # 3개 심어지면 최솟값 구하기
sol = min(sol,c)
return
for i in range(n):
for j in range(n):
if visited[i][j] == False:
for k in range(4):
x = dx[k] + i
y = dy[k] + j
if not 0<=x<n or not 0<=y<n or not visited[x][y] == False: # 꽃을 심을 수 있으면
break
else:
visited[i][j] = True
cost = arr[i][j]
for k in range(4):
x = dx[k] + i
y = dy[k] + j
visited[x][y] = True
cost += arr[x][y]
flower(cnt+1,c+cost) # 꽃 1개 심기
visited[i][j] = False
for k in range(4):
x = dx[k] + i
y = dy[k] + j
visited[x][y] = False
flower(0,0)
print(sol)
백트래킹을 사용하여 풀었다.
꽃을 심을 수 있는지 dx, dy를 사용해서 구해준다.
'코딩테스트 > Python' 카테고리의 다른 글
[Python] 백준 #1992 - 쿼드트리 (0) | 2022.05.23 |
---|---|
[Python] 백준 #2529 - 부등호 (2) | 2022.05.16 |
[Python] 백준 #2910 - 빈도 정렬 (0) | 2022.05.16 |
[Python] 백준 #3474 - 교수가 된 현우 (0) | 2022.05.16 |
[Python] 백준 #17298 - 오큰수 (0) | 2022.05.16 |