728x90
https://www.acmicpc.net/problem/2503
알고리즘 설명
문제 설명
세 자리 숫자를 맞춥니다.
말한 세 자리의 숫자 중에 위치와 숫자가 모두 일치하는 경우엔 스트라이크,
숫자는 정답숫자 안에 있으나, 위치가 다르다면 볼이 됩니다.
코드 설명
102 부터 987까지 모든 가능한 세자리 숫자를 생성한다.
스트라이크와 볼의 입력에 따라서 숫자 후보를 제거하는 방식
1. 자바코드
import java.io.*;
import java.util.*;
import java.text.*;
public class Main {
public static ArrayList<String> arr = new ArrayList<>();
public static ArrayList<String> noAns = new ArrayList<>();
public static int n, res;
public static BufferedReader br;
public static void main(String[] args) throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine()); // 질문의 개수 입력
// 123부터 987까지의 가능한 모든 숫자 생성
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 10; j++) {
for (int k = 1; k < 10; k++) {
if (i != j && i != k && j != k) {
arr.add(String.valueOf(100 * i + 10 * j + k));
}
}
}
}
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String tmp = st.nextToken(); // 세 자리 숫자
int s = Integer.parseInt(st.nextToken()); // 스트라이크
int b = Integer.parseInt(st.nextToken()); // 볼
for (int j = 0; j < arr.size(); j++) {
if (noAns.contains(arr.get(j))) {
continue;
}
int numS = 0;
int numB = 0;
for (int k = 0; k < 3; k++) {
if (tmp.charAt(k) == arr.get(j).charAt(k)) {
numS++;
} else if (arr.get(j).contains(String.valueOf(tmp.charAt(k)))) {
numB++;
}
}
if (s != numS || b != numB) {
noAns.add(arr.get(j));
}
}
}
System.out.println(arr.size() - noAns.size()); // 후보 개수 출력
}
}
2. 파이썬 코드
arr = []
for i in range(1, 10):
for j in range(1, 10):
for k in range(1, 10):
if i == j or j == k or k == i:
continue
arr.append(str(100 * i + 10 * j + k))
n = int(input()) # 질문의 개수 입력
no_ans = [] # 후보에서 제외할 숫자 리스트
for _ in range(n):
tmp, s, b = map(int, input().split())
tmp = str(tmp)
for i in range(len(arr)):
if arr[i] in no_ans:
continue
num_s, num_b = 0, 0
for j in range(3):
if tmp[j] in arr[i]:
if arr[i][j] == tmp[j]:
num_s += 1
else:
num_b += 1
if s != num_s or b != num_b:
no_ans.append(arr[i])
print(len(arr) - len(no_ans)) # 후보 개수 출력
반응형
'백준 문제풀이 코드저장소 > Silver' 카테고리의 다른 글
Baekjoon 2156. 포도주 시식 / Python (0) | 2025.01.06 |
---|---|
Baekjoon 4307. 개미 / Java (0) | 2024.07.07 |
Baekjoon 11478. 서로 다른 문자열의 개수 / Java (0) | 2024.07.03 |
Baekjoon 16951. 블록 놀이 / Java (0) | 2024.07.03 |