-
[프로그래머스] 숫자 야구Algorithm 2020. 9. 15. 12:30반응형
숫자 야구 게임이란 2명이 서로가 생각한 숫자를 맞추는 게임입니다.
각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다.
그리고 그 결과를 토대로 상대가 정한 숫자를 예상한 뒤 맞힙니다.
import java.util.*; public class numberBaseBall { static int[] number = {1, 2, 3, 4, 5, 6, 7, 8, 9}; static Set<Integer> rightSet = new HashSet<>(); static int[][] baseball; public static void main(String[] args) { System.out.println(solution(new int[][]{{123, 1, 1}, {356, 1, 0}, {327, 2, 0}, {489, 0, 1}})); } static public int solution(int[][] baseball) { int answer = 0; numberBaseBall.baseball = baseball; perm1(number, 0, 9, 3); answer = rightSet.size(); return answer; } public static void perm1(int[] arr, int depth, int n, int k) { if (depth == k) { save(arr, k); return; } for (int i = depth; i < n; i++) { swap(arr, i, depth); perm1(arr, depth + 1, n, k); swap(arr, i, depth); } } public static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void save(int[] arr, int k) { int number = 0; for (int i = 0; i < k; i++) number += arr[i] * Math.pow(10, k - 1 - i); check(number); } private static void check(int number) { boolean isRight = true; int strike = 0; int ball = 0; String numToStr = Integer.toString(number); for (int i = 0; i < baseball.length; i++) { String tryBall = Integer.toString(baseball[i][0]); for (int j = 0; j < 3; j++) { char chr = tryBall.charAt(j); if (chr == numToStr.charAt(j)) { strike++; } else { if (numToStr.contains(Character.toString(chr))) { ball++; } } } if (strike != baseball[i][1] || ball != baseball[i][2]) { isRight = false; break; } strike = 0; ball = 0; } if (isRight) { rightSet.add(number); } } }
순열을 이용하여 풀이
반응형'Algorithm' 카테고리의 다른 글
[프로그래머스] 모의고사 (0) 2020.09.15 [프로그래머스] 소수 찾기 (0) 2020.09.15 [프로그래머스] 카펫 (0) 2020.09.15 [프로그래머스] K번째수 (0) 2020.09.15 [프로그래머스] 크레인인형뽑기게임 (0) 2020.09.15