문제
https://school.programmers.co.kr/learn/courses/30/lessons/160585
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 개요
틱택토 게임을 혼자서 진행하던 머쓱이가 규칙을 어겼는지 판단하기 위해, 현재 게임판이 규칙에 맞는 상태인지 확인하는 문제입니다. 게임판을 나타내는 문자열 배열 board가 주어질 때, 규칙에 맞는 상태라면 1을, 그렇지 않으면 0을 반환하는 solution 함수를 작성하는 문제입니다.
규칙 위반 조건:
- "O"와 "X"의 순서가 맞지 않은 경우 ("O" 차례에 "X"가 표시되거나 그 반대).
- 승리 조건이 충족되어 게임이 종료되어야 하는데도 게임이 진행된 경우.
접근 방법
틱택토 규칙이 위반하지 않은 조건인지 모두 확인 (코드 내 주석 참고)
import java.util.*;
class Solution {
static String[][] map = new String[3][3];
public int solution(String[] board) {
for(int i=0; i<board.length; i++) map[i] = board[i].split("");
return isPossible() ? 1 : 0;
}
public boolean isPossible() {
int cntO = 0, cntX = 0;
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(map[i][j].equals("O")) cntO++;
if(map[i][j].equals("X")) cntX++;
}
}
boolean correctO = correct("O");
boolean correctX = correct("X");
if(cntX > cntO) return false; //X가 더 많을 경우
if(Math.abs(cntX - cntO) >= 2) return false; //X와 O의 수가 2개 이상 차이날 경우
if(correctO && correctX) return false; //X와 O 둘 다 완성됐을 경우
if(correctX && (cntO > cntX)) return false; //X가 완성 됐지만 O의 수가 더 많을 경우
if(correctO && (cntO == cntX)) return false; //O가 완성 됐지만 O와 X의 수와 같을 경우
return true;
}
public boolean correct(String target) {
for(int i=0; i<3; i++) {
if(map[i][0].equals(target)) {
if(map[i][1].equals(target) && (map[i][2]).equals(target)) return true;
}
if(map[0][i].equals(target)) {
if(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[0][2].equals(target) && map[1][1].equals(target) && map[2][0].equals(target)) return true;
return false;
}
}
유사한 문제
https://icodesiuuuu.tistory.com/30
[백준] 7682 틱택토 - Java
문제https://www.acmicpc.net/problem/7682 문제 개요틱택토는 두 명이 번갈아 가며 말을 놓는 게임으로, 3×3 격자판에서 X와 O를 배치하여 가로, 세로, 또는 대각선 방향으로 연속된 3칸을 채우면 승리하
icodesiuuuu.tistory.com
'문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [PCCP 기출문제] 2번 / 석유 시추 - Java (0) | 2024.11.21 |
---|---|
[프로그래머스] 혼자 놀기의 달인 - Java (1) | 2024.11.20 |
[프로그래머스] 시소 짝꿍 - Java (0) | 2024.11.18 |
[프로그래머스] 연속된 부분 수열의 합 - Java (0) | 2024.11.17 |
[프로그래머스] N-Queen - Java (0) | 2024.11.16 |