[SWEA] 11315. 오목 판정 _ Java

jii0_0·2022년 8월 24일
0

SW Expert Academy

목록 보기
25/33
post-thumbnail

오목 판정 (D3)

문제 링크

  • N * N 크기의 판에서 오목이 있는지 판정하는 프로그램
  • 가로, 세로, 우상향대각선, 우하향대각선을 체크하면서 범위를 벗어나는지 이어지는 돌의 개수가 5개인지 확인한다

Solution

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Solution {
	static int N;
	static List<char[]> map;

	public static boolean isFive(int r, int c) {
		int cnt;

		if (c < N - 4) {
			// 열 체크
			cnt = 1;
			for (int i = 1; i < 5; i++) {
				if (map.get(r)[c + i] == '.') {
					break;
				}
				cnt++;
			}
			if (cnt == 5)
				return true;
		}

		// 행 체크
		if (r < N - 4) {
			cnt = 1;
			for (int i = 1; i < 5; i++) {
				if (map.get(r + i)[c] == '.') {
					break;
				}
				cnt++;
			}
			if (cnt == 5)
				return true;

			// 우하향 대각 체크
			if (c < N - 4) {
				cnt = 1;
				for (int i = 1; i < 5; i++) {
					if (map.get(r + i)[c + i] == '.') {
						break;
					}
					cnt++;
				}
				if (cnt == 5)
					return true;
			}

			// 우상향 대각 체크
			if (c >= 4) {
				cnt = 1;
				for (int i = 1; i < 5; i++) {
					if (map.get(r + i)[c - i] == '.') {
						break;
					}
					cnt++;
				}
				if (cnt == 5)
					return true;
			}
		}
		return false;
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();

		for (int t = 1; t <= T; t++) {
			N = sc.nextInt();
			map = new ArrayList<>();
			for (int i = 0; i < N; i++) {
				map.add(sc.next().toCharArray());
			}

			String flag = "NO";
			outer: for (int i = 0; i < N; i++) {
				for (int j = 0; j < N; j++) {
					if (map.get(i)[j] == 'o') {
						if (isFive(i, j)) {
							flag = "YES";
							break outer;
						}

					}
				}
			}

			System.out.printf("#%d %s\n", t, flag);
		}
	}
}
profile
느려도 꾸준히

0개의 댓글