coding_test

[99클럽 5기 코테 스터디 TIL 14일차] 오목 (feat. 완전탐색 ?!?!?!?)

jeri 2025. 2. 7. 21:36
반응형

1) 문제

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

 

2) 문제 풀이

import java.util.*;

public class Main {
    static int[][] board = new int[19][19];
    static int[] dx = {1, 0, 1, -1}; // 우, 하, 우하, 우상
    static int[] dy = {0, 1, 1, 1};
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 19; i++) {
            for (int j = 0; j < 19; j++) {
                board[i][j] = sc.nextInt();
            }
        }
        
        for (int i = 0; i < 19; i++) {
            for (int j = 0; j < 19; j++) {
                if (board[i][j] != 0) {
                    int winner = board[i][j];
                    for (int d = 0; d < 4; d++) {
                        if (checkWin(i, j, winner, d)) {
                            System.out.println(winner);
                            System.out.println((i + 1) + " " + (j + 1));
                            return;
                        }
                    }
                }
            }
        }
        System.out.println(0);
    }
    
    static boolean checkWin(int x, int y, int color, int dir) {
        int count = 1;
        int nx = x + dx[dir], ny = y + dy[dir];
        while (isValid(nx, ny) && board[nx][ny] == color) {
            count++;
            nx += dx[dir];
            ny += dy[dir];
        }
        
        nx = x - dx[dir];
        ny = y - dy[dir];
        while (isValid(nx, ny) && board[nx][ny] == color) {
            count++;
            nx -= dx[dir];
            ny -= dy[dir];
        }
        
        return count == 5;
    }
    
    static boolean isValid(int x, int y) {
        return x >= 0 && x < 19 && y >= 0 && y < 19;
    }
}
반응형