반응형
https://school.programmers.co.kr/learn/courses/30/lessons/160585
혼자서 하는 틱택토 문제
틱택토의 판이 가능한 형태인지 아닌지 체크하는 문제
#사용 알고리즘
구현
1. 주어진 판이 가능한지 판별해야한다. 그러기 위해서는 O, X의 빙고에 따른 조건을 따져야한다.
2. 기본적으로 O가 선공, X가 후공이므로 O와 X의 갯수가 다르거나 2개 이상 차이나면 틱택토가 불가능하다.
3. O가 빙고일 때 X도 빙고면 불가능하고, 빙고라면 O가 X보다 1개 많아야한다.
3. X가 빙고라면 O와 X의 갯수가 같아야한다.
4. 위 조건에 맞게 구현하면 성공
반응형
⚙ 내가 푼 정답 코드
class Solution {
public static char[][] boards = new char[3][3];
public static int checker(char s){
for (int i = 0; i < 3; i++){
// 세로 줄
if(boards[i][0] == s && boards[i][1] == s && boards[i][2] == s){
return 1;
}
// 가로 줄
if(boards[0][i] == s && boards[1][i] == s && boards[2][i] == s){
return 1;
}
}
// 대각선 \
if (boards[0][0] == s && boards[1][1] == s && boards[2][2] == s){
return 1;
}
// 대각선 /
if (boards[0][2] == s && boards[1][1] == s && boards[2][0] == s){
return 1;
}
// 빙고 없으면
return 0;
}
public int solution(String[] board) {
int O = 0;
int X = 0;
for(int i = 0 ; i< 3; i++){
for(int j = 0 ; j < 3; j++){
boards[i][j] = board[i].charAt(j);
if(boards[i][j] == 'O'){
O++;
}
else if(boards[i][j] == 'X'){
X++;
}
}
}
int result = 1;
int o = checker('O');
int x = checker('X');
if(O < X || O > X+1){ // O가 X보다 작거나 (O가 선공) O가 X보다 2개 이상 많을 경우(O를 2번 이상 더 둠)
result = 0;
}
else if (o == 1 && x == 1){ // O로 빙고지만, X도 빙고라면 (선공 후공 규칙)
result = 0;
}
else if(o == 1 && O != X+1){ // O로 빙고지만, O와 X 갯수가 1개 차이가 아니면(선공)
result = 0;
}
else if(x == 1 && O != X){ // X로 빙고지만, O와 X 갯수가 같지 않으면(후공)
result = 0;
}
return result;
}
}
반응형
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 호텔 대실(Java) (0) | 2024.05.01 |
---|---|
[프로그래머스] 미로 탈출 명령어(Java) (1) | 2024.04.12 |
[프로그래머스] 도넛과 막대 그래프 (Java) (0) | 2024.04.12 |
[프로그래머스] 당구 연습(Java) (1) | 2024.04.10 |
[프로그래머스] 연속된 부분 수열의 합(Java) (2) | 2024.04.10 |
댓글