본문 바로가기

알고리즘/백준

[JAVA]백준_2503_숫자야구

문제 : https://www.acmicpc.net/problem/2503

 

2503번: 숫자 야구

첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트��

www.acmicpc.net

 

문제 유형 : 브루트포스

 

풀이 방식 : 3중 for 문으로 모든 경우의 수 민혁이가 질문한 세 자리 수와 볼 카운트 비교

 

소스코드

package BOJ;

import java.io.*;
import java.util.*;

public class BOJ_2503_숫자야구_Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		// 1. 입력
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine()); 
		String[] MH = new String[N]; //민혁이가 질문한 세 자리 수
		int[][] MH_info = new int[N][2]; //민혁이가 질문한 세 자리수에대한 정보 [0]:스트라이크 [1]:볼
		for (int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine()," ");
			MH[i] = st.nextToken();
			MH_info[i][0] = Integer.parseInt(st.nextToken());
			MH_info[i][1] = Integer.parseInt(st.nextToken());
		}
		
		// 2. 연산 브루트포스
		int ans = 0;
		for (int i = 1; i <= 9; i++) { // 첫째자리
			for (int j = 1; j <= 9; j++) { // 둘째자리
				if(i!=j) {
					for (int k = 1; k <= 9; k++) { // 셋째자리
						if(k!=i&&k!=j) {
							boolean flag = true;
							for (int s = 0; s < N; s++) { // 민혁이가 질문한 수
								int strike = 0;
								int ball = 0;
								String str = MH[s];
								if(str.charAt(0)-'0'==i) strike++;
								if(str.charAt(1)-'0'==j) strike++;
								if(str.charAt(2)-'0'==k) strike++;
								if(str.charAt(0)-'0'==j||str.charAt(0)-'0'==k) ball++;
								if(str.charAt(1)-'0'==i||str.charAt(1)-'0'==k) ball++;
								if(str.charAt(2)-'0'==i||str.charAt(2)-'0'==j) ball++;
								if(MH_info[s][0]!=strike||MH_info[s][1]!=ball) {
									flag = false;
									break;
								} 
							}
							if(flag) ans++;
						}
					}
				}
			}
		}
		System.out.println(ans);
	}

}

'알고리즘 > 백준' 카테고리의 다른 글

[JAVA]백준_1713_후보추천하기  (0) 2020.08.07
[JAVA]백준_9663_NQueen  (4) 2020.08.06
[JAVA]백준_3187_양치기꿍  (0) 2020.08.05
[JAVA]백준_11967_불켜기  (0) 2020.08.04
[JAVA]백준_1347_미로만들기  (0) 2020.08.04