[JAVA]백준 2503번 숫자 야구
[JAVA]백준 2503번 숫자 야구
📌문제 링크
https://www.acmicpc.net/problem/2503
📌문제 설명
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.