코테/JAVA

[백준 2503 / JAVA] 숫자 야구

쇼티드 2024. 1. 15. 19:23
728x90
반응형

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

 

2503번: 숫자 야구

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

www.acmicpc.net

 

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input;
        int result = 0;

        N = Integer.parseInt(br.readLine());

        a = new int[N][3];

        for (int i = 0; i < N; i++) {
            input = br.readLine();
            StringTokenizer st = new StringTokenizer(input);
            a[i][0] = Integer.parseInt(st.nextToken()); // 수
            a[i][1] = Integer.parseInt(st.nextToken()); // 스트라이크
            a[i][2] = Integer.parseInt(st.nextToken()); // 볼
        }

        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)
                        if (sol(i, j, k))
                            result++;
        System.out.println(result);
    }

수, 스트라이크, 볼을 입력받고 모든 수를 대입해 스트라이크와 볼 수가 맞는지 확인한다.

 

    public static boolean sol(int n1, int n2, int n3) {
        int first, second, third;
        int strike, ball;
        for (int i = 0; i < N; i++) {
            strike = 0;
            ball = 0;
            first = a[i][0] / 100; // 첫째 자리
            second = (a[i][0] % 100) / 10; // 둘째 자리
            third = a[i][0] % 10; // 셋째 자리
            
            if (first == n1)
                strike++;
            else if (first == n2 || first == n3)
                ball++;
            if (second == n2)
                strike++;
            else if (second == n1 || second == n3)
                ball++;
            if (third == n3)
                strike++;
            else if (third == n2 || third == n1)
                ball++;

            if (strike != a[i][1] || ball != a[i][2])
                return false;
        }
        return true;
    }

입력 받은 수의 각 자리 수를 구하고 이를 비교해 스트라이크와 볼 수를 구한다.

모두 일치한다면 true 아니면 false를 반환한다.

 

전체코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static int N;
    public static int[][] a;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input;
        int result = 0;

        N = Integer.parseInt(br.readLine());

        a = new int[N][3];

        for (int i = 0; i < N; i++) {
            input = br.readLine();
            StringTokenizer st = new StringTokenizer(input);
            a[i][0] = Integer.parseInt(st.nextToken()); // 수
            a[i][1] = Integer.parseInt(st.nextToken()); // 스트라이크
            a[i][2] = Integer.parseInt(st.nextToken()); // 볼
        }

        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)
                        if (sol(i, j, k))
                            result++;
        System.out.println(result);
    }

    public static boolean sol(int n1, int n2, int n3) {
        int first, second, third;
        int strike, ball;
        for (int i = 0; i < N; i++) {
            strike = 0;
            ball = 0;
            first = a[i][0] / 100; // 첫째 자리
            second = (a[i][0] % 100) / 10; // 둘째 자리
            third = a[i][0] % 10; // 셋째 자리
            
            if (first == n1)
                strike++;
            else if (first == n2 || first == n3)
                ball++;
            if (second == n2)
                strike++;
            else if (second == n1 || second == n3)
                ball++;
            if (third == n3)
                strike++;
            else if (third == n2 || third == n1)
                ball++;

            if (strike != a[i][1] || ball != a[i][2])
                return false;
        }
        return true;
    }
}

 

728x90
반응형