백준 - 2615 : 오목 [자바]

HungAh.log·2021년 8월 12일
0
post-custom-banner
import java.util.Scanner;

public class Main {

	static final int[] dx = {-1,0,1,1};
	static final int[] dy = {1,1,1,0};
	static final int[] check = {-1, 5};
	
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int win = 0;
		int[][] ba = new int[19][19];
		
		for (int i = 0; i < ba.length; i++) {
			for (int j = 0; j < ba[0].length; j++) {
				ba[i][j] = sc.nextInt();
			}
		}
		//첫 줄에 승부가 결정되지 않았다면 0, 검은 색이 이기면 1, 흰 색이 이기면 2를 출력한다
		end:for (int i = 0; i < ba.length; i++) {
			for (int j = 0; j < ba[0].length; j++) {
				int x = i;
				int y = j;
				//시작 자리 하나, 1알 확인!
				if(ba[x][y] == 1 || ba[x][y] ==2) {
					int omok = ba[x][y];
						here:for (int k = 0; k < dx.length; k++) {
							x = i;
							y = j;
							//시작 위치+1, +2, +3, +4 확인!
							for (int h = 0; h < 4; h++) {
								x+=dx[k];
								y+=dy[k];
								if(x >=0 && x < ba.length && y >=0 && y < ba.length) {
									if(ba[x][y] == omok) {
										continue;
									}else continue here;
								}else continue here;
							}
							
							//위 포문을 빠져나온거면 다섯알 연속인 것이 확인됨!!
							//이제 시작위치 -1, 시작위치 +5 위치에 시작위치의 바둑알이랑 같으면 안 됨. 
							//6개 연속이 되므로
							//그래서 확인해주기
							
							chk:for (int k2 = 0; k2 < check.length; k2++) {
								int nx = i + check[k2]*dx[k];
								int ny = j + check[k2]*dy[k];
								if(nx >=0 && nx < ba.length && ny >=0 && ny < ba.length) {
									if(ba[nx][ny] != omok) {
										continue chk;
									}continue here;
								}
							}
							
							// 위 두 for문을 빠져나와서 여기까지 와야 win 값이 바뀜.
							win = 1; //이긴 사람 존재,,
							System.out.printf("%d\n", omok);
							System.out.printf("%d %d", i+1, j+1 );
							break end;
						}
				}	
			}
		}
		//승부가 결정나지 않을 경우 win=0으로 끝남
		if(win != 1) System.out.println(0);
				
		sc.close();				
	}
}
profile
👩🏻‍💻
post-custom-banner

0개의 댓글