프로그래머스 - 혼자서 하는 틱택토

홍성진·2023년 2월 25일
0

프로그래머스 - 혼자서 하는 틱택토

문제 유형을 뭐라고 해야 할 지 모르겠습니다.

틱택토 게임판이 주어집니다.(틱택토 은 상단 소제목, 또는 링크를 눌러 참고하시기 바랍니다) 게임의 을 지키며 진행했을 때 나올 수 있는 판인지 없는 판인지 판별하는 문제입니다.

나올 수 없는 판의 종류는 다음과 같습니다. 가운데 정렬이 안 된 점 양해 부탁드립니다.
벨로그 표 가운데 정렬 방법 아시는 분 공유 부탁드립니다!

1. o의 개수가 x보다 적거나, 2 이상 많은 경우

oo
x
xx

 

oo
o
x

2. o와 x의 개수가 같으면서 o가 승리한 경우

ooo
x
xx

 

ooo
ox
xxx

3. o가 x보다 1 크면서 x가 승리한 경우

xxx
oo
oo

 

ooo
oox
xxx

 
게임판 크기가 3x3으로 제한되어 있기 때문에 모든 경우가 이 3가지 안에 들어갑니다. containLine 이라는 함수를 하드코딩(?)하여 승리여부를 판별했습니다.

class Solution {
    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++) {
               if (board[i].substring(j, j + 1).equals("O")) {
                   o++;
               }
               if (board[i].substring(j, j + 1).equals("X")) {
                   x++;
               }
           } 
        }
        
        if (x > o || o - x > 1) {
            return 0;
        }
        if (o == x && containLine(board, "O")) {
            return 0;
        }
        if (containLine(board, "X") && o == x + 1) {
            return 0;
        }
        
        return 1;
    }

	public boolean containLine(String[] board, String s) {
        if (board[0].substring(0, 1).equals(s)
                && board[1].substring(1, 2).equals(s)
                        && board[2].substring(2, 3).equals(s)) {
            return true;
        }
        if (board[2].substring(0, 1).equals(s)
                && board[1].substring(1, 2).equals(s)
                        && board[0].substring(2, 3).equals(s)) {
            return true;
        }
        
        for (int i = 0; i < 3; i++) {
            if (board[i].substring(0, 1).equals(s)
                    && board[i].substring(1, 2).equals(s)
                            && board[i].substring(2, 3).equals(s)) {
                return true;
            }
            
            if (board[0].substring(i, i + 1).equals(s)
                    && board[1].substring(i, i + 1).equals(s)
                            && board[2].substring(i, i + 1).equals(s)) {
                return true;
            }
        }
        return false;
    }
}

0개의 댓글