본문 바로가기

ProgramSoliving

백준 : 7682

반응형

https://www.acmicpc.net/problem/7682

 

7682번: 틱택토

문제 틱택토 게임은 두 명의 사람이 번갈아가며 말을 놓는 게임이다. 게임판은 3×3 격자판이며, 처음에는 비어 있다. 두 사람은 각각 X 또는 O 말을 번갈아가며 놓는데, 반드시 첫 번째 사람이 X를 놓고 두 번째 사람이 O를 놓는다. 어느 때든지 한 사람의 말이 가로, 세로, 대각선 방향으로 3칸을 잇는 데 성공하면 게임은 즉시 끝난다. 게임판이 가득 차도 게임은 끝난다. 게임판의 상태가 주어지면, 그 상태가 틱택토 게임에서 발생할 수 있는 최종 상태인

www.acmicpc.net

 

하나의 쿼리를 할때마다 유효성을 판단하는것은 메모리초과 or 시간 초과를 야기시킨다.

쿼리를 진행하기전에 모든 경우의수를 조사하다. 실제로 경우의수 < 9! 미만이다. 중간에 틱택톡을 완성하는 경우에는 그뒤의 경우를 포함하지 않으므로..

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
package algo;
 
 
public class B7682 {
 
    static int[][] check = { { 012 }, { 345 }, { 678 }, { 036 }, { 147 }, { 258 }, { 048 },
            { 246 } };
    static int endCnt;
    static char[] map = new char[9];
 
    static HashMap<StringString> hash = new HashMap<StringString>();
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
 
        DFS(".........".toCharArray(), 0);
        
        while (true) {
            map = br.readLine().toCharArray();
            if (map[0== 'e')
                break;
 
            boolean answer = false;
 
            if (hash.containsKey(String.valueOf(map))) {
                answer = true;
            }
 
            if (answer) {
                sb.append("valid\n");
            } else {
                sb.append("invalid\n");
            }
 
        }
        System.out.print(sb.toString());
    }
 
    public static void DFS(char thisMap[], int cnt) {
        if (cnt == 9) {
            hash.put(String.valueOf(thisMap), "valid");
            return;
        }
 
        for (int i = 0; i < 8; i++) {
            if (thisMap[check[i][0]] != '.' && thisMap[check[i][0]] == thisMap[check[i][1]]
                    && thisMap[check[i][0]] == thisMap[check[i][2]]) {
                hash.put(String.valueOf(thisMap), "valid");
                return;
            }
        }
        
        for(int i=0;i<9;i++) {
            if (thisMap[i] != '.')
                continue;
            thisMap[i] = cnt % 2 == 0 ? 'X' : 'O';
            DFS(thisMap, cnt + 1);
            thisMap[i] = '.';
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
반응형

'ProgramSoliving' 카테고리의 다른 글

백준 : 2113 java  (0) 2020.05.03
백준 16933: java  (0) 2020.04.30
백준 : 10775  (0) 2020.04.15
백준 : 1637  (0) 2020.04.15
백준 : 5213 JAVA  (0) 2020.03.17