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

배인성·2023년 2월 27일
0

프로그래머스

목록 보기
43/55
post-thumbnail

문제링크

문제 링크

문제설명

제한사항

입출력 예

입출력예 설명은 링크 참조~

풀이

  1. 일단 o, x가 각각 몇 번이 나왔는지 다 세고, 누군가 이겼다면 줄이 몇 개가 완성이 되었는지 가져오자
  2. 절대 일어날 수 없는 일 (x가 o보다 많다거나 둘 다 한줄을 완성했다거나 등등 모든 경우의 수를 if문으로 처리 하자

구현은 쉬운데 반례 찾는게 좀 힘들었던..

마지막에 내가 놓쳤던 부분은 오목의 3x3이 되는 수와 같은 모양을 하는 수를 놓쳤었다.

첫번째로 말이 안되는 x가 o보다 많거나, 그렇다고 o가 x랑 2개이상 차이가 난다거나 하는 경우를 거르고

두번째로 둘 다 줄을 완성하는 경우를 거르고

세번째로 누군가 이겼다면, 이기는 시점에서 o와 x의 카운트상 나와서는 안되는 카운트가 있다. 그 부분을 차례차례 예외처리했더니 통과했다.

코드

import java.util.*;
class Solution {
    public char[][] map;
    public int win(char c) {
        int game = 0;
        for(int i = 0; i < 3; i++)
        {
            if(map[i][0] == c && map[i][0] == map[i][1] && map[i][1] == map[i][2])
                game++;
            if(map[0][i] == c && map[0][i] == map[1][i] && map[1][i] == map[2][i])
                game++;
        }
        if(map[0][0] == c && map[0][0] == map[1][1] && map[1][1] == map[2][2])
            game++;
        if(map[0][2] == c && map[0][2] == map[1][1] && map[1][1] == map[2][0])
            game++;
        return game;
    }
    public int solution(String[] board) {
        int answer = 1;
        map = new char[3][3];
        int oCnt = 0;
        int xCnt = 0;
        for(int i = 0; i < 3; i++)
        {
            for(int j = 0; j < 3; j++)
            {
                map[i][j] = board[i].charAt(j);
                if(map[i][j] == 'O')
                    oCnt++;
                if(map[i][j] == 'X')
                    xCnt++;
            }
        }
        if(xCnt > oCnt || oCnt - xCnt > 1)
            return 0;
        if(win('O') > 0 && win('X') > 0)
            return 0;
        if(win('O') > 0) {
            if(oCnt == xCnt)//o가 이겼으면 o가 한개 많아야함
                return 0;
        }
        if(win('X') > 0) {
            if(oCnt > xCnt)
                return 0;
        }
        
        return answer;
    }
    //x가 이기면 수가 같아야하고, o가 이기면 o가 한개 많아야함
}
profile
부지런히 살자!!

1개의 댓글

comment-user-thumbnail
2023년 3월 18일

덕분에 좋은 내용 잘 보고 갑니다.
정말 감사합니다.

답글 달기