SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
import java.util.Scanner;
import java.io.FileInputStream;
import java.util.Arrays;
public class Omok {
public static void main(String args[]) throws Exception {
Scanner sc = new Scanner(System.in);
int T;
T = sc.nextInt();
for (int tc = 1; tc <= T; tc++) {
String ans = null;
int N = sc.nextInt();
String[][] omok = new String[N][N];
for (int i = 0; i < N; i++) {
String[] omokarr = sc.next().split("");
for (int j = 0; j < N; j++) {
omok[i][j] = omokarr[j];
}
} // 2차원 스트링 배열 입력받기 끝
naga: for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
// 가로가 연속일 때
int cnt1 = 0;
for (int a = 0; a < N; a++) {
if (j + a >= 0 && j + a < N) {
if (omok[i][j + a].equals("o")) {
cnt1++;
} else {
break;
}
}
}
if (cnt1 >= 5) {
ans = "YES";
break naga;
}
ans = "NO";
// 세로가 연속일 때
int cnt2 = 0;
for (int a = 0; a < N; a++) {
if (i + a >= 0 && i + a < N) {
if (omok[i + a][j].equals("o")) {
cnt2++;
} else {
break;
}
}
}
if (cnt2 >= 5) {
ans = "YES";
break naga;
}
ans = "NO";
// 오른쪽 위에서 왼쪽 아래로 내려오는 대각선
int cnt3 = 0;
if (omok[i][j].equals("o")) {
cnt3++;
for (int k = 1; k < 5; k++) {
if (i + k < N && j - k >= 0 && omok[i + k][j - k].equals("o")) {
cnt3++;
if (cnt3 >= 5) {
ans = "YES";
break naga;
}
ans = "NO";
}
}
}
// 왼쪽 위에서 오른쪽 아래로 내려오는 대각선
int cnt4 = 0;
if (omok[i][j].equals("o")) {
cnt4++;
for (int k = 1; k < 5; k++) {
if (i + k < N && j + k < N && omok[i + k][j + k].equals("o")) {
cnt4++;
if (cnt4 >= 5) {
ans = "YES";
break naga;
}
ans = "NO";
}
}
}
}
}
System.out.println("#" + tc + " " + ans);
}
}
}
포인트
- naga : 라고 표시한 for문을 밑에서 break naga를 통해 for문 밖으로 나갈 수 있다. 앞으로 유용하게 쓸듯.
- 오목판을 안나가도록 조건 설정해주기
- 오른쪽 위에서 왼쪽 아래로 내려오는 대각선의 조건 : omok[i+k][j-k].equlas("o")
- 왼쪽 위에서 오른쪽 아래로 내려오는 대각선의 조건 : omok[i+k][j+k].equals("o")
'Algorithm' 카테고리의 다른 글
[BOJ_15686] 치킨 배달 (골드 5) (1) | 2023.10.08 |
---|---|
[알고리즘]정렬 (3) | 2023.08.13 |
[알고리즘]SWEA_1954.달팽이숫자 (0) | 2023.08.12 |
[알고리즘]SWEA_어디에 단어가 들어갈 수 있을까 (2) | 2023.08.10 |
[알고리즘]SWEA_2001.파리퇴치 (0) | 2023.08.09 |