본문 바로가기

Algorithms/Programmers

[Java] Progrmmers 코딩테스트 연습 : 숫자 야구 (완전탐색)

728x90

---문제---

문제 설명

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

각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다. 그리고 그 결과를 토대로 상대가 정한 숫자를 예상한 뒤 맞힙니다.

* 숫자는 맞지만, 위치가 틀렸을 때는 볼

* 숫자와 위치가 모두 맞을 때는 스트라이크

* 숫자와 위치가 모두 틀렸을 때는 아웃

제한사항

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

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

 

---코드---

public class Dfs_3 {
	
	public static void main(String[] args) {
		int[][] baseball = {{123,1,1},
							{356,1,0},
							{327,2,0},
							{489,0,1}};
		String a, b;
		int answer = 0 ;
		for(int i=123; i<987; ++i) {
			boolean check = false;
			a = Integer.toString(i);
			if(i/100==0||a.charAt(1)=='0'||a.charAt(2)=='0') {
				continue;
			}
			if(a.charAt(0)==a.charAt(1) || a.charAt(0)==a.charAt(2) || a.charAt(1)==a.charAt(2)) {
				continue;
			}
			
			for(int j=0; j<baseball.length; ++j) {
				int strike =0 ;
				int ball = 0;
				if(baseball[j][1]==3) {
					System.out.println(1);
					return;
				}
				b= Integer.toString(baseball[j][0]);
				
				for(int f =0; f<3; ++f) {
					for(int s =0; s<3; ++s) {
						char tmp1 = a.charAt(f);
						char tmp2 = b.charAt(s);
						if(f==s) {
							if(tmp1==tmp2) {
								++strike;
							}
						}else {
							if(tmp1==tmp2) {
								++ball;
							}
						}
					}
				}
				if(strike!=baseball[j][1] || ball!=baseball[j][2]) {
					check = true;
					break;
				}
				
			}
			if(!check) {
				++answer;
			}
			
		}
		System.out.println(answer);
		
	}

}

---출처---

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

 

반응형