
-Code
import java.io.*;
import java.util.*;
public class BOJ7682 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
while (true) {
String line = br.readLine();
// 탈출 조건
if (line.equals("end")) {
break;
}
// 틱택토 셋팅 및 o와 x의 각각 갯수 저장
char[][] tictecto = new char[3][3];
int idx = 0;
int oCnt = 0, xCont = 0;
for (int r = 0; r < 3; r++) {
for (int c = 0; c < 3; c++) {
tictecto[r][c] = line.charAt(idx++);
if (tictecto[r][c] == 'O') {
oCnt++;
} else if (tictecto[r][c] == 'X') {
xCont++;
}
}
}
// 검사
boolean isValid = false;
Set<Character> winResult = checkTictecto(tictecto);
if (winResult.contains('X') && !winResult.contains('O')) {
// x만 이기면 x의 돌 갯수가 1개 많아야 함
isValid = oCnt + 1 == xCont;
} else if (!winResult.contains('X') && winResult.contains('O')){
// o가 이기면 2 플레이어의 돌 갯수가 같아야 함
isValid = oCnt == xCont;
} else if (!winResult.contains('X') && !winResult.contains('O')){
// 이긴 사람이 없는 경우 x가 5개 o가 4개여야 함
isValid = xCont == 5 && oCnt == 4;
}
System.out.println(isValid ? "valid" : "invalid");
}
br.close();
}
private static Set<Character> checkTictecto(char[][] tictecto) {
Set<Character> answer = new HashSet<>();
for (int i = 0; i < 3; i++) {
// 빈칸이 아니고 가로가 다 같으면 결과 추가
if (
tictecto[i][0] != '.' &&
tictecto[i][0] == tictecto[i][1] &&
tictecto[i][1] == tictecto[i][2]
) {
answer.add(tictecto[i][0]);
}
// 빈칸이 아니고 세로가 다 같으면 결과 추가
if (
tictecto[0][i] != '.' &&
tictecto[0][i] == tictecto[1][i] &&
tictecto[1][i] == tictecto[2][i]
) {
answer.add(tictecto[0][i]);
}
}
// 왼쪽 대각선 확인
if (
tictecto[0][0] != '.' &&
tictecto[0][0] == tictecto[1][1] &&
tictecto[1][1] == tictecto[2][2]
) {
answer.add(tictecto[0][0]);
}
// 오른쪽 대각선 확인
if (
tictecto[0][2] != '.' &&
tictecto[0][2] == tictecto[1][1] &&
tictecto[1][1] == tictecto[2][0]
) {
answer.add(tictecto[0][2]);
}
// 총 이긴 플레이어 반환
return answer;
}
}
큰 설계는 맞았는데 세밀한 조건에서 문제가 생겨 틀렸었습니다.
반환하는 것이 이기는 플레이어가 존재하면 해당 플레이어를 반환하는 식으로 처음에 하다가 이렇게 되면 2명이 둘 다 이긴 경우를 계산 못하게 되어서 해당 부분에 대해서 Set을 통해 전체를 검사하도록 하였습니다.
이후 빈 공간 처리를 처음에 빼먹어서 한 번 더 이상한 값이 출력되었습니다. 이 2개의 문제를 해결하니 통과할 수 있었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 2508번 사탕 박사 고창영 (0) | 2026.02.09 |
|---|---|
| [백준/Java] 2816번 디지털 티비 (0) | 2026.02.09 |
| [백준/Java] 4366번 Average Speed (0) | 2026.02.08 |
| [백준/Java] 15815번 천재 수학자 성필 (0) | 2026.02.07 |
| [백준/Java] 14426번 접두사 찾기 (0) | 2026.02.07 |