문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXaSUPYqPYMDFASQ
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이
오목은 5개가 연속으로 있으면 된다.
방향은 위, 아래, 왼쪽, 오른쪽, 우상향대각선, 우하향대각선 이 있을 수 있는데 (0,0)부터 (N-1, N-1) 까지 탐색하면서 오목이 연속한 부분이 있는지 없는지 판단하기 때문에 아래, 오른쪽, 우상향대각, 우하향대각만 판단하면 된다.
코드
import java.io.*;
import java.util.*;
public class Solution {
static char board[][];
static int n;
static int dx [] = {1,0,1,1};
static int dy [] = {0,1,1,-1};
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int test_case = 1; test_case <= T; test_case++)
{
n = Integer.parseInt(br.readLine());
board = new char[n][n];
for(int i=0;i<n;i++) {
String str = br.readLine();
for(int j=0;j<n;j++) {
board[i][j] = str.charAt(j);
}
}
if(iscontinue()) System.out.println("#"+test_case+" YES");
else System.out.println("#"+test_case+" NO");
}
}
static boolean iscontinue() {
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
if(board[i][j] == 'o') {
for(int k=0;k<4;k++) {
if(check(i, j, k)) return true;
}
}
}
}
return false;
}
static boolean check(int x, int y, int idx) {
int nx = x;
int ny = y;
for(int i=0;i<4;i++) {
nx = nx + dx[idx];
ny = ny + dy[idx];
if(nx >= n || ny >= n || nx < 0 || ny < 0) return false;
if(board[nx][ny] == '.') return false;
}
return true;
}
}
문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXaSUPYqPYMDFASQ
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이
오목은 5개가 연속으로 있으면 된다.
방향은 위, 아래, 왼쪽, 오른쪽, 우상향대각선, 우하향대각선 이 있을 수 있는데 (0,0)부터 (N-1, N-1) 까지 탐색하면서 오목이 연속한 부분이 있는지 없는지 판단하기 때문에 아래, 오른쪽, 우상향대각, 우하향대각만 판단하면 된다.
코드
import java.io.*; import java.util.*; public class Solution { static char board[][]; static int n; static int dx [] = {1,0,1,1}; static int dy [] = {0,1,1,-1}; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); for(int test_case = 1; test_case <= T; test_case++) { n = Integer.parseInt(br.readLine()); board = new char[n][n]; for(int i=0;i<n;i++) { String str = br.readLine(); for(int j=0;j<n;j++) { board[i][j] = str.charAt(j); } } if(iscontinue()) System.out.println("#"+test_case+" YES"); else System.out.println("#"+test_case+" NO"); } } static boolean iscontinue() { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(board[i][j] == 'o') { for(int k=0;k<4;k++) { if(check(i, j, k)) return true; } } } } return false; } static boolean check(int x, int y, int idx) { int nx = x; int ny = y; for(int i=0;i<4;i++) { nx = nx + dx[idx]; ny = ny + dy[idx]; if(nx >= n || ny >= n || nx < 0 || ny < 0) return false; if(board[nx][ny] == '.') return false; } return true; } }