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

2020. 6. 22. 16:58프로그래머스/LEVEL 2

import java.util.*;

class Solution {
    public int solution(int[][] baseball) {
        int answer = 0;
        
        List<String> allCase = new ArrayList<>();
        
        for(int i=123; i<1000; i++){
            String s = Integer.toString(i);
            if(s.contains("0")){
                continue;
            }
            if(s.charAt(0)!=s.charAt(1) && s.charAt(1)!=s.charAt(2) && s.charAt(0)!=s.charAt(2)){
                allCase.add(s);
            }
            
        }
        
        
        for(int i=0; i<baseball.length; i++){
            String target = Integer.toString(baseball[i][0]);
            for(int j=0; j<allCase.size(); j++){
                int ball= countBall(allCase.get(j),target);
                int strike = countStrike(allCase.get(j),target);
                
                if(strike != baseball[i][1] || ball != baseball[i][2]){
                    allCase.set(j,"x");
                }
            }
        }
        
        for(int i=0; i<allCase.size(); i++){
            if(!allCase.get(i).equals("x")){
                answer++;
            }
        }
        
        return answer;
    }
    private int countBall(String s1, String s2){
        int ballCount = 0;
        
        for(int i=0; i<s1.length(); i++){
            for(int j=0; j<s2.length(); j++){
                if(s1.charAt(i)==s2.charAt(j) && i!=j){
                    ballCount++;
                }
            }
        }
        return ballCount;
    }
    
    private int countStrike(String s1, String s2){
        int strikeCount=0;
        
        for(int i=0; i<s1.length(); i++){
            for(int j=0; j<s2.length(); j++){
                if(s1.charAt(i)==s2.charAt(j) && i==j){
                    strikeCount++;
                }
            }
        }
        
        return strikeCount;
    }
}

1. 3자리 숫자중 0이 포함되지않고, 각 자리수가 중복되지 않는 모든 수를 담는 리스트를 만든다.

2. 만들어진 리스트들중 baseball의 각 인덱스에 해당하는 값과 볼카운트와 스트라이크 카운트를 비교하여 하나라도 같지 않으면 "x"로 값을 바꾼다.

3. baseball에 해당하는 값들을 모두 돌고 나면 모든 조건을 만족하는 값만 "x"표시가 아닐 것이다. 이것들의 개수를 answer로 해준다.