Programmers-숫자야구

2020-06-08

위 문제는 Programmers 숫자야구 문제에 관한 설명입니다.


문제

숫자 야구 게임이란 2명이 서로가 생각한 숫자를 맞추는 게임입니다. 게임해보기

각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다.

그리고 그 결과를 토대로 상대가 정한 숫자를 예상한 뒤 맞힙니다.

  • 숫자는 맞지만, 위치가 틀렸을 때는 볼
  • 숫자와 위치가 모두 맞을 때는 스트라이크
  • 숫자와 위치가 모두 틀렸을 때는 아웃

예를 들어, 아래의 경우가 있으면

A : 123
B : 1스트라이크 1볼.
A : 356
B : 1스트라이크 0볼.
A : 327
B : 2스트라이크 0볼.
A : 489
B : 0스트라이크 1볼.

이때 가능한 답은 324와 328 두 가지입니다.

질문한 세 자리의 수, 스트라이크의 수, 볼의 수를 담은 2차원 배열 baseball이 매개변수로 주어질 때,

가능한 답의 개수를 return 하도록 solution 함수를 작성해주세요.

  • 제한사항

질문의 수는 1 이상 100 이하의 자연수입니다.

baseball의 각 행은 [세 자리의 수, 스트라이크의 수, 볼의 수] 를 담고 있습니다.


class Solution {
    public int solution(int[][] baseball) {
        int answer = 0;
        
        for(int i = 123; i< 987; i++)
        {
            int C = i%10;
            int B = (i/10)%10;
            int A = i/100;
            if(A ==0 || B==0 || C==0){
                continue;
            }
            if((A==B)||(B==C)||(C==A)){
                continue;
            }
            for(int j = 0; j < baseball.length; j++)
            {
                int strike = 0;
                int ball = 0;
                
                int question = baseball[j][0];
                int question_C = question % 10;
                int question_B = (question / 10)%10;
                int question_A = question/100;
                
                if(question_C ==0 || question_B == 0 || question_A==0){
                    break;
                }
                if(C == question_C) strike++;
                if(B == question_B) strike++;
                if(A == question_A) strike++;
                
                if(strike!= baseball[j][1]) break;
                
                if((C==question_B)||(C==question_A)) ball ++;
                if((B==question_A)||(B==question_C)) ball ++;
                if((A==question_B)||(A==question_C)) ball ++;
                if(ball != baseball[j][2]) break;
                
                if(j== baseball.length-1) answer++;
            }
        }
        return answer;
    }
}

숫자 야구