白駿2615号-五子棋
3563 ワード
問題を解く
右上隅、下隅、右上隅、右下隅にくぼみがあるかどうかを確認する関数を作成します.
肉木であれば勝利から除外するために初めて(cnt=1)の場合は逆、つまり右側なら左側、下を確認すると上に同じ色の石があり、存在するならスキップします.どうせ反対側でいつかチェックします.
cnt=5の場合、後ろに肉首が現れたらfalseに戻ります.
質問リンク
boj/2615
ソースコード
PS/2615.java
右上隅、下隅、右上隅、右下隅にくぼみがあるかどうかを確認する関数を作成します.
肉木であれば勝利から除外するために初めて(cnt=1)の場合は逆、つまり右側なら左側、下を確認すると上に同じ色の石があり、存在するならスキップします.どうせ反対側でいつかチェックします.
cnt=5の場合、後ろに肉首が現れたらfalseに戻ります.
質問リンク
boj/2615
ソースコード
PS/2615.java
import java.io.*;
import java.util.Collections;
import java.util.StringTokenizer;
import java.util.Vector;
public class Main {
static int[][] arr = new int[20][20];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for(int i=0;i<19;i++)
{
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=0;j<19;j++)
arr[i][j] = Integer.parseInt(st.nextToken());
}
for(int i=0;i<19;i++)
{
for(int j=0;j<19;j++)
{
if(arr[i][j] ==0 )
continue;
if(func1(j,i,1,arr[i][j]) || func2(j,i,1,arr[i][j]) || func3(j,i,1,arr[i][j]) ||func4(j,i,1,arr[i][j]))
{
bw.write(Integer.toString(arr[i][j]) +"\n" + Integer.toString(i+1) +" " + Integer.toString(j+1));
bw.flush();
return;
}
}
}
bw.write(Integer.toString(0));
bw.flush();
}
public static boolean func1(int x, int y,int cnt,int color)
{
boolean ret =false;
if(cnt == 5) {
if(x +1 <=18 &&arr[y][x+1]==color)
return false;
return true;
}
if(cnt== 1 &&x -1 >=0 &&arr[y][x-1]==color)
return false;
if(x +1 <=18 &&arr[y][x+1]==color)
ret = func1(x+1,y,cnt+1,color);
return ret;
}
public static boolean func2(int x, int y,int cnt,int color)
{
boolean ret =false;
if(cnt == 5) {
if(y+1 <=18 &&arr[y+1][x]==color)
return false;
return true;
}
if(cnt== 1 &&y-1 >=0 &&arr[y-1][x]==color)
return false;
if(y+1 <=18 &&arr[y+1][x]==color)
ret = func2(x,y+1,cnt+1,color);
return ret;
}
public static boolean func3(int x, int y,int cnt,int color)
{
boolean ret =false;
if(cnt == 5) {
if((x + 1<=18) && (y+1 <=18) &&(arr[y+1][x+1]==color))
return false;
return true;
}
if(cnt== 1 &&(x -1>=0) && (y-1 >=0) &&(arr[y-1][x-1]==color))
return false;
if((x + 1<=18) && (y+1 <=18) &&(arr[y+1][x+1]==color))
ret = func3(x+1,y+1,cnt+1,color);
return ret;
}
public static boolean func4(int x, int y,int cnt,int color)
{
boolean ret =false;
if(cnt == 5) {
if(x + 1 <= 18 && y-1 >=0 &&arr[y-1][x+1]==color)
return false;
return true;
}
if(cnt== 1 &&x-1 >=0 && y+1 <=18 && arr[y+1][x-1]==color)
return false;
if(x + 1 <= 18 && y-1 >=0 &&arr[y-1][x+1]==color)
ret = func4(x+1,y-1,cnt+1,color);
return ret;
}
}
Reference
この問題について(白駿2615号-五子棋), 我々は、より多くの情報をここで見つけました https://velog.io/@pjh612/백준-2615번-오목テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol