티스토리 뷰
출저 : https://www.acmicpc.net/problem/14620
"재귀를 활용한 완전 탐색"
가능한 씨앗의 배치를 모두 검색하는 문제이다. 씨앗을 중심으로 4방향이 화단에 들어오면서, 겹치지 않는 경우에 따라 세 개의 꽃을 배치하고 해당 위치의 가격을 모두 더한 값 중에 최소값이 답이다. 꽃잎 배치의 경우 가장자리에선 꽃을 피지 못하므로 1 ~ N-2 까지 탐색한다.
DFS에서 x 좌표를 주어 이전 씨앗부터 탐색한다. (y 좌표도 넣어주면 더 좋지만... N이 크지 않기에 생략)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int N; static int[][] cost; static int min = Integer.MAX_VALUE; static boolean[][] visited; static int[] dx = {0,0,1,-1}; static int[] dy = {1,-1,0,0}; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); N = Integer.parseInt(br.readLine()); cost = new int[N][N]; visited = new boolean[N][N]; for (int i = 0; i < N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for (int j = 0; j < N; j++) { cost[i][j] = Integer.parseInt(st.nextToken()); } } solve(0,0,1); System.out.println(min); } static void solve(int cnt, int sum, int x) { if(cnt == 3) { min = Math.min(min, sum); return; } for (int i = x; i < N-1; i++) { for (int j = 1; j < N-1; j++) { if(visited[i][j]) continue; if(!available(i, j)) continue; int c = cost[i][j]; visited[i][j] = true; for (int k = 0; k < 4; k++) { visited[i+dx[k]][j+dy[k]] = true; c += cost[i+dx[k]][j+dy[k]]; } solve(cnt+1, sum +c, i); visited[i][j] = false; for (int k = 0; k < 4; k++) { visited[i+dx[k]][j+dy[k]] = false; } } } } static boolean available(int x, int y) { for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if(x < 0 || x >= N || y < 0 || y >= N || visited[nx][ny]) return false; } return true; } } | cs |
'Study > 알고리즘 문제풀이' 카테고리의 다른 글
백준 3967. 매직 스타 :: 돼지개발자 (0) | 2018.12.09 |
---|---|
백준 1799. 비숍 :: 돼지개발자 (2) | 2018.12.06 |
백준 11967. 불켜기 :: 돼지개발자 (0) | 2018.12.05 |
백준 15663. N과 M (9) :: 돼지개발자 (0) | 2018.12.05 |
백준 14226. 이모티콘 :: 돼지개발자 (0) | 2018.12.05 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday