LEVEL2_프로그래머스_숫자 야구
Written on September 25, 2019
문제
숫자 야구 게임이란 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 함수를 작성해주세요.
풀이
function solution(baseball) {
let count = 0;
const getStrike = (num1, num2) => {
let count = 0;
for (let i = 0; i < 3; i++) {
if (num1[i] === num2[i]) {
count++;
}
}
return count;
};
const getBall = (num1, num2) => {
let count = 0;
for (let i = 0; i < 3; i++) {
if (num2.includes(num1[i]) && num1[i] !== num2[i]) {
count++;
}
}
return count;
};
const countPossibleNums = numStr => {
if (numStr.length === 3) {
let isPossible = true;
for (let i = 0; i < baseball.length; i++) {
let baseballNumStr = baseball[i][0].toString();
if (getStrike(numStr, baseballNumStr) === baseball[i][1]) {
if (getBall(numStr, baseballNumStr) === baseball[i][2]) {
} else {
isPossible = false;
}
} else {
isPossible = false;
}
}
if (isPossible) {
count++;
}
return;
}
for (let i = 1; i <= 9; i++) {
if (!numStr.includes(i)) {
countPossibleNums(numStr + i);
}
}
};
countPossibleNums("");
return count;
}
문제바로가기
👩🏻💻 배우는 것을 즐기는 프론트엔드 개발자 입니다
부족한 블로그에 방문해 주셔서 감사합니다 🙇🏻♀️
in the process of becoming the best version of myself