티스토리 뷰
출저 : https://www.acmicpc.net/problem/3967
"DFS 백트래킹"
시간초과로 삽집을 좀 했던 문제.. 알파벳 원소들의 위치를 p 에 저장해 두고, 조합을 만들고 나중에 이 좌표 정보를 가지고 valid 체크를 하였다. (이 p 배열을 그냥 풀어서 쓰면 시간이 많이 줄여진다.....)
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; public class Main { static char[][] map = new char[5][9]; static boolean[] visited = new boolean[13]; static ArrayList<Node> list = new ArrayList<>(); static int[][][] p = { {{0,4},{1,3},{2,2},{3,1}}, {{3,1},{3,3},{3,5},{3,7}}, {{0,4},{1,5},{2,6},{3,7}}, {{1,1},{1,3},{1,5},{1,7}}, {{1,1},{2,2},{3,3},{4,4}}, {{4,4},{3,5},{2,6},{1,7}} }; static int size; static boolean ok; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); for (int i = 0; i < 5; i++) { char[] temp = br.readLine().toCharArray(); for (int j = 0; j < 9; j++) { map[i][j] = temp[j]; if(temp[j] =='x') { list.add(new Node(i, j)); } else if(temp[j] != '.'){ visited[temp[j]-'A'+1] = true; } } } size = list.size(); solve(0,0); } static void solve( int cnt, int idx) { if(ok) return ; if(cnt == size && check()) { ok = true; for (int i = 0; i < 5; i++) { System.out.println(map[i]); } return ; } for (int j = 1; j <= 12; j++) { if(visited[j]) continue; Node cur = list.get(idx); visited[j] = true; map[cur.x][cur.y] = (char)(j+64); solve(cnt+1, idx+1); visited[j] = false; map[cur.x][cur.y] = 'x'; } } static boolean check() { for (int a = 0; a < 6; a++) { int sum = 0; for (int i = 0; i < 4; i++) { sum += (map[p[a][i][0]][p[a][i][1]] -'A'+1); } if(sum != 26) return false; } return true; } } class Node { int x; int y; Node(int x, int y) { this.x = x; this.y = y; } } | cs |
'Study > 알고리즘 문제풀이' 카테고리의 다른 글
백준 1963. 소수 경로 :: 돼지개발자 (0) | 2018.12.11 |
---|---|
백준 2573. 빙산 :: 돼지개발자 (0) | 2018.12.09 |
백준 1799. 비숍 :: 돼지개발자 (2) | 2018.12.06 |
백준 14620. 꽃길 :: 돼지개발자 (0) | 2018.12.06 |
백준 11967. 불켜기 :: 돼지개발자 (0) | 2018.12.05 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday