-
[프로그래머스] 숫자 야구 (07.20)algorithm/프로그래머스 2020. 7. 20. 23:29
문제
https://programmers.co.kr/learn/courses/30/lessons/42841
접근법
완전 탐색이라는 분류에 맞게 가능한 모든 경우의 수를 체크했다.
범위가 세 자리 수로 많지 않으므로 123부터 897까지 직접 확인했다.
문제에서 서로 다른 세개의 수라고 했으므로 세 숫자는 모두 달라야 하고 1~9까지의 범위라고 했으므로 0이 들어가면 안되는 조건을 고려하여 진행하였다.
코드
import java.util.*; class Solution { public int solution(int[][] baseball) { Set<String> set = new HashSet<>(); for(int i=123; i<=987; i++){ boolean isTrue = false; String num = String.valueOf(i); String[] numArr = num.split(""); if(numArr[0].equals("0") || numArr[1].equals("0") || numArr[2].equals("0")) continue; if(numArr[0].equals(numArr[1]) || numArr[1].equals(numArr[2]) || numArr[2].equals(numArr[0])) continue; for(int j=0;j<baseball.length;j++){ if(!checkStrikeAndBall(num, String.valueOf(baseball[j][0]), baseball[j][1], baseball[j][2])){ isTrue = true; break; } } if(!isTrue) set.add(num); } return set.size(); } public boolean checkStrikeAndBall(String num1, String num2, int strike, int ball){ String[] num1Arr = num1.split(""); String[] num2Arr = num2.split(""); for(int i=0;i<3;i++){ if(num1Arr[i].equals(num2Arr[i])) strike --; } List<String> list = Arrays.asList(num2Arr); for(int i=0;i<3;i++){ System.out.println(list.indexOf(num1Arr[i])); if(list.contains(num1Arr[i]) && list.indexOf(num1Arr[i]) != i){ ball--; } } if(strike == 0 && ball == 0) return true; return false; } }
'algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] N으로 표현 (07.24) (0) 2020.07.24 [프로그래머스] 종이 접기 (07.23) (0) 2020.07.23 [프로그래머스] 라면공장 (07.16) (0) 2020.07.16 [프로그래머스] 여행경로 (07.15) (0) 2020.07.15 [프로그래머스] 단어 변환 (07.13) (0) 2020.07.13