백준 baseball game
처음에 이문제를 보고 엄청 당황했었다. 이문제는 어떻게 풀어가야하지라는 생각부터 했었다. 이문제를 풀려면 일단 먼저 현실에서 baseball game을 한번 해보는 걸 추천함..ㅠㅠ 1부터 9까지의 3자리의 숫자중에 답을 불렀을때 그에 해당하는 자리와 숫자가 맞으면 스트라이크 아니면 ball이렇게 말해준다. 이 코드는 다소 복잡해 보일수 있는데 알면 너무 쉬운 문제이다.
- 입력값의 둘째줄의 첫번째 입력값부터 3번째 입력값까지 for문으로 arr배열에 저장.
- 3중 for문을 만들어서 1 ~ 999 까지의 모든경우를 보는거다.
- 그리고 i j k가 서로 같지 않을때를 조건으로 걸어준다(ex) 111, 222, 333, 444)
- 물어본 질문만큼 for문을 다시돌고 백의자리 십의자리 일의자리의 수를 구해준다.
- if문으로 스트라이크, 볼 여부를 확인후 질문 조건과 비교후 다 같다면 result를 1더해준다.
import java.util.Scanner;
public class Main{
public static void main(String[] args){
// Please Enter Your Code Here
Scanner s = new Scanner(System.in);
int[][] arr = new int[105][3];
int num = s.nextInt();
int num2;
int result = 0;
for (int i=0;i<num;i++){
for (int j=0;j<3;j++){
num2 = s.nextInt();
arr[i][j] = num2;
}
}
int first, second, third;
int cnt;
for (int i=1;i<10;i++){
for (int j=1;j<10;j++){
for (int k=1;k<10;k++){
if (i != j && j != k && i != k){
cnt = 0;
for (int l=0;l<num;l++){
first = arr[l][0] / 100;
second = (arr[l][0] / 10) % 10;
third = arr[l][0] % 10;
int strike = 0, ball = 0;
if (first == i) strike++;
if (second == j) strike++;
if (third == k) strike++;
// i j k
// first second third
if (i == second || i == third) ball++;
if (j == first || j == third) ball++;
if (k == first || k == second) ball++;
if (arr[l][1] != strike || arr[l][2] != ball) cnt++;
}
if (cnt == 0) result++;
}
}
}
}
System.out.println(result);
}
}