ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 숫자 야구
    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

    댓글

Designed by Tistory.