https://school.programmers.co.kr/learn/courses/30/lessons/160585
틱택토 게임판이 주어졌을 때, 가능한 경우인지 판단하는 단순 구현 문제다.
고려한 경우 중 코드에 쓰지 않은 경우가 있다.
(이는 O와 X개수 비교 조건에서 자동으로 걸러지므로 제외해도 된다.)
e.g.)
OXO
XOX
OXO
(중간의 O를 마지막으로 두었다고 가정하면 올바른 경우, 아니라면 틀린 경우이므로 => 가능한 경우이다.)
e.g.)
OOO
. . .
OOO
(이어진 곳이 2쌍 이상이고 겹치지 않음 => 순서를 어떻게 배치하던 불가능한 경우 => 하지만, O와 X의 개수 비교에서 자동으로 걸러지므로 고려X)
class Solution {
public int solution(String[] board) {
char[][] b = new char[3][3];
int O = 0, X = 0;
for(int i=0; i<3; i++) {
char[] r = board[i].toCharArray();
for(int j=0; j<3; j++) {
char c = r[j];
b[i][j] = c;
if(c == 'O')
O++;
else if(c == 'X')
X++;
}
}
boolean Owin = isWin('O', b);
boolean Xwin = isWin('X', b);
if(O != X && O != X + 1)
return 0;
if(Owin && Xwin)
return 0;
if(Xwin && O > X)
return 0;
if(Owin && O == X)
return 0;
return 1;
}
static boolean isWin(char c, char[][] b) {
for(int i=0; i<3; i++) {
if(c == b[i][0] && c == b[i][1] && c == b[i][2])
return true;
if(c == b[0][i] && c == b[1][i] && c == b[2][i])
return true;
}
if(c == b[0][0] && c == b[1][1] && c == b[2][2])
return true;
if(c == b[0][2] && c == b[1][1] && c == b[2][0])
return true;
return false;
}
}
'[프로그래머스] 절대 외부 IDE를 써선 안돼 > Java' 카테고리의 다른 글
[lv2] k진수에서 소수 개수 구하기 (0) | 2024.12.12 |
---|---|
[lv2] 마법의 엘리베이터 (0) | 2024.12.10 |
[lv2] 연속 부분 수열 합의 개수 (0) | 2024.12.08 |
[lv2] 짝지어 제거하기 (0) | 2024.12.08 |
[lv2] 2 x n 타일링 (0) | 2024.12.06 |