190109 완전탐색 (3) 숫자 야구
2019-01-09
완전 탐색 (3) 숫자 야구
문제 설명
숫자 야구 게임이란 2명이 서로가 생각한 숫자를 맞추는 게임입니다. 게임해보기
각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다. 그리고 그 결과를 토대로 상대가 정한 숫자를 예상한 뒤 맞힙니다.
* 숫자는 맞지만, 위치가 틀렸을 때는 볼
* 숫자와 위치가 모두 맞을 때는 스트라이크
* 숫자와 위치가 모두 틀렸을 때는 아웃
예를 들어, 아래의 경우가 있으면
A : 123
B : 1스트라이크 1볼.
A : 356
B : 1스트라이크 0볼.
A : 327
B : 2스트라이크 0볼.
A : 489
B : 0스트라이크 1볼.
이때 가능한 답은 324와 328 두 가지입니다.
질문한 세 자리의 수, 스트라이크의 수, 볼의 수를 담은 2차원 배열 baseball이 매개변수로 주어질 때, 가능한 답의 개수를 return 하도록 solution 함수를 작성해주세요.
제한사항
- 질문의 수는 1 이상 100 이하의 자연수입니다.
- baseball의 각 행은 [세 자리의 수, 스트라이크의 수, 볼의 수] 를 담고 있습니다.
입출력 예
baseball | return |
---|---|
[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]] | 2 |
풀이 과정
- 가능한 모든 경우의 수 생성 - 게임 진행해서 결과가 다른 경우 break, 결과가 같으면 answer++
- 각 세 자리의 숫자가 모두 다르다는 점을 빨리 알았으면 더 빨리 풀었을 것 같다.
import java.util.*;
class Solution {
public static int ballCount(String answer, String target){
int result=0;
String[] answerArr=answer.split("");
String[] targetArr=target.split("");
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(i==j) continue;
if(answerArr[i].equals(targetArr[j])) result++;
}
}
return result;
}
public static int strikeCount(String answer, String target){
int result=0;
String[] answerArr=answer.split("");
String[] targetArr=target.split("");
for(int i=0;i<3;i++){
if(answerArr[i].equals(targetArr[i])){
result++;
}
}
return result;
}
public int solution(int[][] baseball) {
int answer = 0;
ArrayList<String> numList=new ArrayList<>();
// 가능한 모든 경우의 수를 생성한다.
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) continue;
numList.add(Integer.toString(i)+Integer.toString(j)+Integer.toString(k));
}
// 제시된 게임과 비교
for(String n : numList){
boolean isAnswer=true;
for(int i=0;i<baseball.length;i++){
String tmp=Integer.toString(baseball[i][0]);
if(strikeCount(n,tmp)!=baseball[i][1] || ballCount(n,tmp)!=baseball[i][2]){
isAnswer=false;
break;
}
}
if(isAnswer)
answer++;
}
return answer;
}
}
-
equals와 ==의 차이
-
둘 다 양쪽에 있는 내용을 boolean 타입으로 반환한다.
-
1) 형태의 차이
- equals(): 메소드
- ==: 연산자
-
2) 비교할 수 있는 대상의 차이
-
equals(): 비교하고자 하는 대상의 내용 자체를 비교
-
==: 비교하고자 하는 대상의 주소값을 비교
-
예시를 보면?
-
String a="aaa"; String b=a; String c=new String("aaa"); System.out.println(a.equals(b)); System.out.println(a==b); System.out.println(a==c); // false!!! System.out.println(a.equals(c));
- a, b와 c는 다른 주소값을 할당받는다-> C가 문자열을 대입한 것이 아니라 new String()을 통해 새로운 문자열을 선언하였기 때문이다.
-
-