Post

[JAVA]백준 2503번 숫자 야구

[JAVA]백준 2503번 숫자 야구

📌문제 링크


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

Image

📌문제 설명


3자릿수 숫자에 질문의 수도 적기 때문에 모든 경우를 다 확인해 보면 됩니다.

📌코드


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Vector;

class Comp {
    String num; // 숫자 문자열
    int s, b; // 스트라이크와 볼의 개수
}

public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    static Vector<Comp> v = new Vector<>(); // 입력된 숫자와 스트라이크, 볼 정보를 저장할 벡터
    static int N, answer = 0; // N: 입력 개수, answer: 가능한 숫자의 개수

    public static void main(String[] args) throws Exception {
        input(); // 입력 함수 호출
        solve(); // 문제 해결 함수 호출
    }

    public static void input() throws Exception {
        N = Integer.parseInt(br.readLine()); // 첫 줄에서 N을 입력받음
        for (int i = 0; i < N; i++) {
            String[] str = br.readLine().split(" "); // 한 줄씩 입력받아 공백으로 분리
            Comp c = new Comp();
            c.num = str[0]; // 숫자 문자열
            c.s = Integer.parseInt(str[1]); // 스트라이크 개수
            c.b = Integer.parseInt(str[2]); // 볼 개수
            v.add(c); // 벡터에 추가
        }
        br.close(); // 입력 스트림 닫기
    }

    public static void solve() throws Exception {
        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) { // 숫자가 중복되면 건너뜀
                        continue;
                    }
                    Boolean flag = true; // 가능한 숫자인지 확인하는 플래그
                    for(Comp comp : v) {
                        int sCnt = 0, bCnt = 0; // 스트라이크와 볼 개수 초기화
                        String num = comp.num;
                        if(num.charAt(0) - '0' == i) {
                            sCnt++; // 첫 번째 숫자가 맞으면 스트라이크 증가
                        } else if(num.charAt(0) - '0' == j || num.charAt(0) - '0' == k) {
                            bCnt++; // 첫 번째 숫자가 다른 위치에 있으면 볼 증가
                        }
                        if(num.charAt(1) - '0' == j) {
                            sCnt++; // 두 번째 숫자가 맞으면 스트라이크 증가
                        } else if(num.charAt(1) - '0' == i || num.charAt(1) - '0' == k) {
                            bCnt++; // 두 번째 숫자가 다른 위치에 있으면 볼 증가
                        }
                        if(num.charAt(2) - '0' == k) {
                            sCnt++; // 세 번째 숫자가 맞으면 스트라이크 증가
                        } else if(num.charAt(2) - '0' == i || num.charAt(2) - '0' == j) {
                            bCnt++; // 세 번째 숫자가 다른 위치에 있으면 볼 증가
                        }
                        if(comp.s != sCnt || comp.b != bCnt) { // 스트라이크나 볼 개수가 맞지 않으면
                            flag = false; // 가능한 숫자가 아님
                            break;
                        }
                    }
                    if(flag) { // 모든 조건을 만족하면
                        answer++; // 가능한 숫자 개수 증가
                    }
                }
            }
        }

        bw.write(answer + "\n"); // 결과 출력
        bw.flush(); // 출력 스트림 비우기
        bw.close(); // 출력 스트림 닫기
    }
}
This post is licensed under CC BY 4.0 by the author.