https://www.acmicpc.net/problem/2503
문제 접근
상상 속의 정답을 스트라이크와 볼로 찾아나가야 한다.
정답은 0이 될 수 없고, 서로 겹칠 수 없기 때문에 정답의 경우는 123 ~ 987 사이다.
이 사이의 수를 check 배열에 true로 처음에 지정
이후 123~987 사이에 정답일 수 있는 수와 입력받은 숫자 3자리를 일일이 비교하며 스트라이크와 볼인지 판단
이 때 판단한 스트라이크와 볼이 입력받은 스트라이크와 볼의 수와 같은지 비교해서 같다면 정답일 수 있는 수는 그대로 true로 남아있는다.
정답일 수 있는 수 모든 탐색이 끝나면 check[123~987] 사이에 true의 갯수가 가능성이므로 출력
import java.util.*;
import java.io.*;
public class Main {
public static void main (String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
boolean[] check = new boolean[988];
for(int i=123; i<= 987; i++) {
String num = String.valueOf(i);
if(num.charAt(0) == '0' || num.charAt(1) == '0' || num.charAt(2) == '0') continue; // 숫자에 0 인됨
if(num.charAt(0) == num.charAt(1) || num.charAt(0) == num.charAt(2) || num.charAt(1) == num.charAt(2)) continue; // 3개의 숫자가 겹쳐도 안됨
check[i] = true;
}
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken()); // 입력 숫자
int s = Integer.parseInt(st.nextToken()); // 스트라이크
int b = Integer.parseInt(st.nextToken()); // 볼
for(int a=123; a <= 987; a++) {
if(check[a]) { // 정답일 수 있는 수라면 탐색
int sn = 0;
int bn = 0;
// 입력 받은 숫자
for(int one=0; one<3; one++) {
char num_split = Integer.toString(num).charAt(one);
// 정답일 수 있는 숫자
for(int two=0; two<3; two++) {
char a_split = Integer.toString(a).charAt(two);
if(num_split == a_split && one == two) sn++; // 둘의 숫자가 같으면서 위치도 같다면 스트라이크
else if(num_split == a_split && one != two) bn++; // 둘의 숫자는 같은데 위치는 다르면 볼
}
}
if(sn == s && bn == b) check[a] = true; // 입력받은 스트라이크와 볼의 갯수와 같아진다면 가능성 있는 수로 판별
else check[a] = false; // 아니라면 가능성 박탈
}
}
}
int a = 0;
for(int i=123; i<=987; i++) {
if(check[i]) a++;
}
System.out.println(a);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 / 14501 퇴사 / Java / DP] (0) | 2023.07.29 |
---|---|
[백준 / 14425 문자열 집합 / JAVA] (0) | 2023.07.29 |
[백준 1388 / 바닥 장식 / JAVA] (0) | 2023.06.23 |
[백준 18870 / 좌표 압축 / JAVA] (0) | 2023.05.19 |
[백준 11048 / 이동하기 / JAVA] (0) | 2023.05.18 |
댓글