문제설명
숫자 야구 게임이란 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의 각 행은 [세 자리의 수, 스트라이크의 수, 볼의 수] 를 담고 있습니다.
해결 방법
가능한 모든 123 ~ 987까지(0이 나오는 수 제거, 자리수가 중복되면 제거)에서
불가능한 경우를 제거해나간다.
n스트라이크가 들어왔을 경우, 입력받은 숫자와 n개의 자리수에서 값이 일치하지않으면 제거한다.
n볼이 들어왔을 경우, n개의 공통된 수를 가지지 않는 경우를 제거한다.
JAVA
package programmers;
import java.util.*;
public class p_42841 {
public static int solution(int[][] b) {
HashSet<String> set = new HashSet<>();
for(int i = 123; i <= 987; i++) {
String s = String.valueOf(i);
if(s.charAt(0) == s.charAt(1) || s.charAt(1) == s.charAt(2) || s.charAt(2) == s.charAt(0) || s.charAt(0) == '0' || s.charAt(1) == '0' || s.charAt(2) == '0') continue;
set.add(s);
}
for(int i = 0; i < b.length; i++) {
String cmp1 = String.valueOf(b[i][0]);
for(Iterator it = set.iterator(); it.hasNext();){
int same = 0;
String cmp2 = (String)it.next();
for(int j = 0; j < 3; j++) {
if(cmp1.charAt(j) == cmp2.charAt(j)) same++;
}
if(same != b[i][1]) it.remove();
else {
int have = 0;
for(int j = 0; j < 3; j++) {
String tmp = String.valueOf(cmp1.charAt(j));
if(cmp2.contains(tmp)) have++;
}
if(have != b[i][2] + b[i][1]) it.remove();
}
}
for(Iterator it = set.iterator(); it.hasNext();) System.out.print(it.next() + " ");
System.out.println(set.size());
}
return set.size();
}
public static void main(String[] args) {
int[][] b = {{123, 1, 1}, {356, 1, 0}, {327, 2, 0}, {489, 0, 1}};
System.out.println(solution(b));
}
}
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 섬 연결하기 (0) | 2020.04.07 |
---|---|
[프로그래머스] N으로 표현 (2) | 2020.04.06 |
[프로그래머스] 예산 (0) | 2020.04.04 |
[프로그래머스] 등굣길 (0) | 2020.04.04 |
[프로그래머스] 기지국 설치 (0) | 2020.04.04 |
댓글