일단 시작해보는 블로그

[알고리즘_풀이] 프로그래머스 - 숫자 야구 java 본문

CS/알고리즘 풀이

[알고리즘_풀이] 프로그래머스 - 숫자 야구 java

Selina Park 2020. 3. 11. 16:07

https://programmers.co.kr/learn/courses/30/lessons/42841

 

코딩테스트 연습 - 숫자 야구 | 프로그래머스

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

programmers.co.kr

import java.util.*;
class Solution {
   static int solution(int[][] baseball) {
        int[] tmp = new int[3];
        
        // 가능한 모든 경우의 수를 stack에 넣는다.
        Stack<String> stack = new Stack<>();
        for(int i=1; i<=9; i++) {
        	for(int j=1; j<=9; j++) {
        		for(int k=1; k<=9; k++) {
        			if(i!=j && j!=k && i!=k) {
        				stack.add(String.valueOf(i*100 + j*10 + k));
        			}
        		}
        	}
        }
        
        // 맞는 경우의 수를 넣어줄 answerList 선언
        Stack<String> answerList = new Stack<>();
        
        // 조건의 개수는 baseball.length
        // 조건이 하나라도 안맞는 경우 flag를 통해서 걸러낸다.
        while(!stack.isEmpty()) {
        	String out = stack.pop();
        	
    		boolean flag = false;
        	for(int i=0; i<baseball.length; i++) {
        		int strike = strike(out, String.valueOf(baseball[i][0]));
            	int ball = ball(out, String.valueOf(baseball[i][0])) - strike;

            	if(strike != baseball[i][1] || ball != baseball[i][2]) {
            		flag = true;
            		break;
            	}
        	}
        
        	
        	if(flag == false) {
        		answerList.add(out);
        	}
        }
                
        return answerList.size();
    }
    
    static int strike(String n1, String n2) {
    	int rtn = 0;
    	for(int i=0; i<3; i++) {
    		if(n1.charAt(i) == n2.charAt(i)) {
    			rtn++;
    		}
    	}
    	return rtn;
    }
    
    static int ball(String n1, String n2) {
    	int rtn = 0;
    	
    	List<Character> tmp = new ArrayList<>();
    	for(int i=0; i<3; i++) {
    		tmp.add(n2.charAt(i));
    	}
    	
    	for(int i=0; i<3; i++) {
    		if(tmp.contains(n1.charAt(i))) {
    			rtn++;
    		}
    	}
    	
    	return rtn;
    }
}

 

완전탐색 문제인데, 알고리즘 먼저 생각하고 접근해서 풀다가 지쳐서 구글링해서 참고했다ㅠㅠ 

뭔가.... 이렇게 다 해보는 방식일줄 몰랐는데 문제 많이 풀어보고 적응해야겠다.

 

참고

https://programmers.co.kr/learn/courses/30/lessons/42841

Comments