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;
}
}
반응형