728x90
이번 문제는 숫자 야구입니다.
주어진 힌트를 통해 가능한 숫자들의 개수를 출력하는 문제입니다.
해당 문제도 완전탐색을 이용하여 풀어보도록 하겠습니다.
// 슈도 코드 (Java 기준)
// 1. 주어진 입력을 받는다
int[][] hint; // hint에 각 회차별 힌트들을 저장한다.
int count = 0; // 가능한 숫자의 횟수를 받을 변수
// 2. 1 ~ 999 중 각 자릿수가 서로 다른 경우 hint와 비교한다.
// 3. 모든 hint가 통과될 경우 가능한 숫자이므로 count를 1증가 시킨다.
// 4. count를 출력한다.
# Python
n = int(input())
hint = [list(map(int, input().split())) for _ in range(n)]
def isTrue(a: int, b: int, c: int):
for inning in hint:
strike = 0
ball = 0
A = inning[0] // 100
B = inning[0] % 100 // 10
C = inning[0] % 10
if a == A:
strike += 1
elif a == B or a == C:
ball += 1
if b == B:
strike += 1
elif b == A or b == C:
ball += 1
if c == C:
strike += 1
elif c == A or c == B:
ball += 1
if strike != inning[1] or ball != inning[2]:
return False
return True
count = 0
for a in range(1, 10):
for b in range(1, 10):
for c in range(1, 10):
if a != b and b != c and a != c and isTrue(a, b, c):
count += 1
print(count)
// Java
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int[][] questions = new int[n][3];
for (int i = 0; i < n; i++) {
String[] readLine = br.readLine().split(" ");
questions[i][0] = Integer.parseInt(readLine[0]);
questions[i][1] = Integer.parseInt(readLine[1]);
questions[i][2] = Integer.parseInt(readLine[2]);
}
int answer = 0;
for (int a = 1; a <= 9; a++) {
for (int b = 1; b <= 9; b++) {
for (int c = 1; c <= 9; c++) {
if (b != c && a != c && a != b && isTrue(a, b, c, questions)) {
answer++;
}
}
}
}
bw.write(answer + "");
bw.flush();
bw.close();
}
static boolean isTrue(int a, int b, int c, int[][] questions) {
for (int[] question : questions) {
int A = question[0] / 100;
int B = question[0] / 10 % 10;
int C = question[0] % 10;
int strike = 0;
int ball = 0;
if (a == A) {
strike++;
} else if (a == B || a == C) {
ball++;
}
if (b == B) {
strike++;
} else if (b == A || b == C) {
ball++;
}
if (c == C) {
strike++;
} else if (c == A || c == B) {
ball++;
}
if (question[1] != strike || question[2] != ball) {
return false;
}
}
return true;
}
}
깃허브 소스 코드
728x90
'개발일지 > Algorithm' 카테고리의 다른 글
백준 - 1978 소수 찾기 [정수론] (0) | 2023.09.09 |
---|---|
백준 - 15736 청기 백기 [정수론] (0) | 2023.09.06 |
백준 - 1090 체커 [완전탐색] (0) | 2023.09.06 |
백준 - 14586 사탕나누기 [완전탐색] (0) | 2023.09.03 |
백준 - 1816 암호 키 [완전탐색] (0) | 2023.09.03 |