[프로그래머스]#42841 숫자야구

SeungBird·2020년 8월 26일
0

⌨알고리즘(백준)

목록 보기
32/401

문제

숫자 야구 게임이란 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의 각 행은 [세 자리의 수, 스트라이크의 수, 볼의 수] 를 담고 있습니다.

입출력 예

baseballreturn
[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]]2

풀이

이 문제는 완전탐색 알고리즘을 이용해서 푸는 문제이다.

import java.util.Stack;

class Solution {
    public int solution(int[][] baseball) {
        int answer = 0;
        int[] answers = new int[3];
        int[] cnt = new int[2];
        boolean match = true;
        Stack<Integer> stack = new Stack<>();
        Stack<Integer> stack2 = new Stack<>();
        
        for(int i=1; i<10; i++){
            for(int j=1; j<10; j++){
                for(int k=1; k<10; k++){
                    if(i!=j && j!=k && i!=k)
                        stack.push(100*i + 10*j + k);
                }
            }
        }
    
        while(!stack.isEmpty()) {
            int num = stack.pop();
            for(int i=0; i<baseball.length; i++) {
                cnt = strike(num, baseball[i][0]);
                if(cnt[0]!=baseball[i][1] || cnt[1]!=baseball[i][2])
                    match = false;
            }
            if(match)
                stack2.push(num);
            match = true;
        }
        answer = stack2.size();
        return answer;
    }
    
    public int[] strike(int x, int y){
        int[] cnt = new int[2];
        String strX = Integer.toString(x);
        String strY = Integer.toString(y);
        char[] charX = strX.toCharArray();
        char[] charY = strY.toCharArray();
        
        for(int i=0; i<3; i++) {
            if(charX[i]==charY[i])
                cnt[0]++;
            for(int j=0; j<3; j++) {
                if(charX[i]==charY[j])
                    cnt[1]++;
            }
        }
        
        cnt[1]-=cnt[0];
        return cnt;
    }
}
profile
👶🏻Jr. Programmer

0개의 댓글