티스토리 뷰

문제보러가기

 

코딩테스트 연습 - 숫자 야구

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

programmers.co.kr

 

이문제는 완전 탐색 카테고리에 있는 문제로 모든 경우의 수를 다 탐색해서 해를 구하는 방식으로 접근해야 했다.

문제는 어떤 식으로 모든 경우의 수를 구해야 하는가.. 였다. 그래서 좀 찾아보니 모든 해당하는 모든 숫자에 대해 다 탐색해보는 방식으로 풀면 됐다.

 

 

문제풀이

-중복되는 숫자가 없는 3 자릿수를 list에 넣어 탐색한다(123~987 0 은 제외)

-주어진 baseball배열에서 숫자와 스트라이크, 볼의 수를 탐색

-strikeCnt -> list의 탐색할 숫자와 baseball배열의 숫자 : 숫자와 인덱스가 같을경우 => +1

-ballCnt -> list의 탐색할숫자와 baseball배열의 숫자 : 숫자는 같지만 인덱스가 다를 경우 => +1

-strikeCnt == baseball[i][1] && ballCnt == baseball[i][2] 경우에 answer++

 

 

import java.util.ArrayList;

public class Solution {

	public static void main(String[] args) {
		int[][] baseball = {{123, 1, 1}, {356, 1, 0}, {327, 2, 0}, {489, 0, 1}};
		int answer=0;
		
        //list에 탐색할 123~987 숫자 경우 모두 넣어줌
        ArrayList<String> numList = createNum();
		
        //완전탐색
		for(int i=0;i<numList.size();i++){
			if(check(numList.get(i),baseball)){
				answer++;
			}
		}
		System.out.println(answer);
		
	}
    //123~987숫자 리스트 생성
	public static ArrayList<String> createNum(){
		ArrayList<String> list = new ArrayList<>();
		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){
						list.add(String.valueOf(i)+String.valueOf(j)+String.valueOf(k));
					}
				}
			}
		}
		return list;
	}
    
    //가능한 숫자인지 판별
	public static boolean check(String num,int[][] baseball){
		
		boolean check = true;
		for(int i=0;i<baseball.length;i++){
			int strikeCnt=0;
			int ballCnt=0;
			String baseNum = String.valueOf(baseball[i][0]);
			//인덱스,숫자 같은지 =>strike
			for(int j=0;j<num.length();j++){
				if(num.charAt(j)==baseNum.charAt(j)) strikeCnt++;
			}
			//숫자만 같고 인덱스는 다른지 =>ball
			for(int j=0;j<num.length();j++){
				for(int k=0;k<baseNum.length();k++){
					if(num.charAt(j)==baseNum.charAt(k)&& j!=k) ballCnt++;
				}
			}
            //카운트가 맞지 않아 가능한 숫자가 아닐경우
			if(baseball[i][1]!=strikeCnt || baseball[i][2]!=ballCnt)
				check = false;
		}
		
		return check;
	}
}

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함