https://school.programmers.co.kr/learn/courses/30/lessons/160585
풀이
틱택토 게임 결과 판이 있을 때
그 게임이 정상적으로 게임을 진행했을 때 나오는 결과인지만 판단하면 된다.
주인공이 잘못적었는지 가 아닌 O, X 가 번갈아가면서 진행했을 때 정상적으로 나올 수 있는지만 판단하면 된다.
class Solution {
public int solution(String[] board) {
String[][] map = new String[3][3];
int o_cnt = 0;
int x_cnt = 0;
for(int i = 0; i<3; i++) {
String[] tmp = board[i].split("");
for(int j = 0; j<3; j++) {
map[i][j] = tmp[j];
if ("O".equals(tmp[j]))
o_cnt++;
if ("X".equals(tmp[j]))
x_cnt++;
}
}
// X 는 O 보다 많을 수 없고, O는 X 보다 1개 많아야 한다
if (x_cnt - o_cnt > 0 || o_cnt - x_cnt > 1) {
return 0;
}
boolean o_check = check("O", map);
boolean x_check = check("X", map);
if (o_check && x_cnt + 1 != o_cnt)
return 0;
if (x_check && x_cnt != o_cnt)
return 0;
return 1;
}
private boolean check(String target, String[][] map) {
// 가로
for(int i = 0; i<3; i++) {
if (map[i][0].equals(target) && map[i][1].equals(target) && map[i][2].equals(target))
return true;
}
// 세로
for(int i = 0; i<3; i++) {
if (map[0][i].equals(target) && map[1][i].equals(target) && map[2][i].equals(target))
return true;
}
// 대각선
if (map[0][0].equals(target) && map[1][1].equals(target) && map[2][2].equals(target))
return true;
if (map[2][0].equals(target) && map[1][1].equals(target) && map[0][2].equals(target))
return true;
return false;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 정수 삼각형 DP 풀이 (자바) (0) | 2023.05.12 |
---|---|
[프로그래머스] 리코쳇 로봇 (자바) (0) | 2023.05.12 |
[프로그래머스] 숫자 변환하기 (자바) (0) | 2023.05.08 |
[프로그래머스] 미로 탈출 (자바) (0) | 2023.05.04 |
[프로그래머스] 뒤에 있는 큰 수 찾기 (0) | 2023.04.27 |