Make Unreal REAL.
article thumbnail
Level 2. 혼자서 하는 틱택토

 

 

정답률이 낮은 다른 Level 2 문제에 비해 굉장히 쉬운 편이다.

  • 보드 크기가 3 x 3 고정이 아니었다면, 적절한 난이도였을 텐데 고정이어서 쉽게 풀 수 있었다.

 

우선 O, X의 개수를 세어 (O - X) 가 0 혹은 1이 아니면 잘못된 판이다.

 

그리곤 승리한 경우를 확인해, O가 승리한 경우 X의 개수는 1 작고, X가 승리한 경우 O의 개수는 같다.

  • 이 조건을 만족하지 못해도 잘못된 판이다.

 

마지막으로 O와 X가 모두 승리한 경우도 잘못된 판이다.

 

#include <iostream>
#include <vector>

using namespace std;

int solution(vector<string> board)
{
    int nO = 0, nX = 0;

    for (string& s : board)
        for (char c : s)
            nO += (c == 'O'),
            nX += (c == 'X');

    int diff = nO - nX;

    if (!(diff == 0 || diff == 1))
        return 0;

    vector<vector<vector<int>>> vvv = {
        {{0, 0}, {0, 1}, {0, 2}},
        {{1, 0}, {1, 1}, {1, 2}},
        {{2, 0}, {2, 1}, {2, 2}},
        {{0, 0}, {1, 0}, {2, 0}},
        {{0, 1}, {1, 1}, {2, 1}},
        {{0, 2}, {1, 2}, {2, 2}},
        {{0, 0}, {1, 1}, {2, 2}},
        {{2, 0}, {1, 1}, {0, 2}}
    };

    bool bO = 0, bX = 0;

    for (auto& vv : vvv)
    {
        int tO = 0;

        for (auto& v : vv)
            tO += (board[v[0]][v[1]] == 'O');

        if (tO == 3)
        {
            if (nX + 1 != nO)
                return 0;

            bO = true;
            break;
        }
    }

    for (auto& vv : vvv)
    {
        int tX = 0;

        for (auto& v : vv)
            tX += (board[v[0]][v[1]] == 'X');

        if (tX == 3)
        {
            if (nX != nO)
                return 0;

            bX = true;
            break;
        }
    }

    if (bO && bX)
        return 0;

    return 1;
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 3. 보석 쇼핑  (0) 2023.09.03
Level 2. 광물 캐기  (0) 2023.09.02
Level 2. 혼자 놀기의 달인  (0) 2023.08.31
Level 2. 3 x n 타일링  (0) 2023.08.30
Level 2. 과제 진행하기  (0) 2023.08.29
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그