728x90
반응형
출처 : https://programmers.co.kr/learn/courses/30/lessons/42841
참조 : https://gorakgarak.tistory.com/522
문제 설명
숫자 야구 게임이란 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의 각 행은 [세 자리의 수, 스트라이크의 수, 볼의 수] 를 담고 있습니다.
입출력 예
baseballreturn
[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]] | 2 |
입출력 예 설명
문제에 나온 예와 같습니다.
내가 쓴 정답
import java.util.HashSet;
class Solution {
HashSet<Integer> numArr = new HashSet<>();
private int[][] baseball;
public int solution(int[][] baseball) {
this.baseball = baseball;
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
permutation(arr, 0, 3);
return numArr.size();
}
public void permutation(int[] arr, int depth, int k) {
if (depth == k) {
int num = 0;
int j = k-1;
for (int i = 0; i < k; i++) num += arr[i] * Math.pow(10,j--);
check(num);
} else {
for (int i = depth; i < arr.length; i++) {
swap(arr, i, depth);
permutation(arr, depth + 1, k);
swap(arr, i, depth);
}
}
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
private void check(int num) {
Boolean chk = true;
String testNum = Integer.toString(num);
for(int i=0; i < baseball.length; i++) {
int strike = 0, ball = 0;
String userNum = Integer.toString(baseball[i][0]);
for(int j=0; j<3; j++) {
if(testNum.charAt(j) == userNum.charAt(j)) strike++;
else if(testNum.contains(Character.toString(userNum.charAt(j)))) ball++;
if(strike > baseball[i][1] || ball > baseball[i][2]) break;
}
if(strike != baseball[i][1] || ball != baseball[i][2]) {
chk = !chk;
break;
}
}
if(chk) numArr.add(num);
}
}
728x90
반응형
'알고리즘 > 문제 풀이 (출처: 프로그래머스)' 카테고리의 다른 글
[JAVA][SORT] 가장 큰 수_프로그래머스 level 2 (0) | 2020.04.07 |
---|---|
[JAVA][PERMUTATION] 소수 찾기_프로그래머스 level 2 (0) | 2020.04.06 |
[JAVA][DFS] 타겟넘버_프로그래머스 level 3 (0) | 2020.04.04 |
[JAVA][PriorityQueue][ArrayList] 디스크 컨트롤러_프로그래머스 level 3 (0) | 2020.04.04 |
[JAVA][PriorityQueue] 더 맵게_level 2 (0) | 2020.04.04 |