https://www.acmicpc.net/problem/16955
첫번째 플레이어가 돌을 뒀을때 이겼는지 판별하는 문제이다.
빈 칸에 첫번째 플레이어의 돌(X)을 두고, 가로,세로,오른쪽아래로 향하는 대각선, 왼쪽아래로 향하는 대각선 으로 나눠서
이기는 조건인 XXXXX가 존재한다면 1을 출력하면 될 것이다.
대각선을 생각하는 것이 조금 어려웠는데,
왼쪽아래로 향하는 대각선은
열기준으로 작아지는 방향, 행기준으로는 커지는 방향이다.
그런데 찾는 XXXXX의 길이는 5이니
반복문을 설정할때 줄을 시작하는 칸에서 4를 더해주거나 뺀 값이 인덱스를 안 넘어가게 설정해주면 된다.
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
String str[][]=new String[10][10];
for(int i=0;i<10;i++){
String strr=br.readLine();
for(int j=0;j<10;j++){
str[i][j]=String.valueOf(strr.charAt(j));
}
}
boolean flag=false;
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if(str[i][j].equals(".")){
str[i][j]="X";
if(test(str)){
flag=true;
break;
}
str[i][j]=".";
}
}
}
if(flag){
bw.write("1");
}
else{
bw.write("0");
}
bw.flush();
bw.close();
}
static boolean test(String str[][]){
boolean flag=false;
for(int k=0;k<6;k++){
for(int j=0;j<10;j++){
String newstr=str[k][j]+str[k+1][j]+str[k+2][j]+str[k+3][j]+str[k+4][j];
if(newstr.equals("XXXXX")){
flag=true;
}
}
}
for(int k=0;k<10;k++){
for(int j=0;j<6;j++){
String newstr=str[k][j]+str[k][j+1]+str[k][j+2]+str[k][j+3]+str[k][j+4];
if(newstr.equals("XXXXX")){
flag=true;
}
}
}
for(int k=0;k<6;k++){
for(int j=9;j>=4;j--){
String newstr=str[k][j]+str[k+1][j-1]+str[k+2][j-2]+str[k+3][j-3]+str[k+4][j-4];
if(newstr.equals("XXXXX")){
flag=true;
}
}
}
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
String newstr=str[i][j]+str[i+1][j+1]+str[i+2][j+2]+str[i+3][j+3]+str[i+4][j+4];
if(newstr.equals("XXXXX")){
flag=true;
}
}
}
return flag;
}
}
'Koala - 13기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/C++] 15664번 N과 M(10) (0) | 2024.03.03 |
---|---|
[백준/Python] 15351:인생점수 (0) | 2024.02.19 |
[백준/C++] 2798 블랙잭 (0) | 2024.02.18 |
[백준 5533 Python] (0) | 2024.02.18 |
[BOJ/java] -12789번 도키도키 간식드리미 (0) | 2024.02.18 |