Muscardinus
[프로그래머스] 숫자 야구 (Lv2) 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/42841?language=javascript
문제 설명
숫자 야구 게임이란 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의 각 행은 [세 자리의 수, 스트라이크의 수, 볼의 수] 를 담고 있습니다.
입출력 예
baseball | return |
[[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]] | 2 |
입출력 예 설명
문제에 나온 예와 같습니다.
C++
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> baseball) {
int answer = 0;
for(int i=123;i<=987;i++){
int x=i/100;
int y=(i/10)%10;
int z=i%10;
if((x==y)||(y==z)||(x==z)) continue;
if(x==0||y==0||z==0) continue;
for(int j=0;j<baseball.size();j++){
int strike=0;
int ball=0;
int problem=baseball[j][0];
int problemX=problem/100;
int problemY=(problem/10)%10;
int problemZ=problem%10;
if(problemX==0 || problemY==0 || problemZ==0) break;
if(problemX==x) strike++;
if(problemY==y) strike++;
if(problemZ==z) strike++;
if(baseball[j][1]!=strike) break;
if(problemY==x || problemZ==x) ball++;
if(problemX==y || problemZ==y) ball++;
if(problemX==z || problemY==z) ball++;
if(baseball[j][2]!=ball) break;
if(j==baseball.size()-1) answer++;
}
}
return answer;
}
JavaScript
function solution(baseball) {
var answer = 0;
for(let i=123;i<=987;i++){
i=i.toString();
let x=Number(i[0]);
let y=Number(i[1]);
let z=Number(i[2]);
if((x===y)||(y===z)||(x===z)) continue;
if(x===0||y===0||z===0) continue;
for(let j=0;j<baseball.length;j++){
let strike=0;
let ball=0;
let problem=baseball[j][0].toString();
let problemX=Number(problem[0]);
let problemY=Number(problem[1]);
let problemZ=Number(problem[2]);
if(problemX===0 || problemY===0 || problemZ===0) break;
if(problemX===x) strike++;
if(problemY===y) strike++;
if(problemZ===z) strike++;
if(baseball[j][1]!=strike) break;
if(problemY===x || problemZ===x) ball++;
if(problemX===y || problemZ===y) ball++;
if(problemX===z || problemY===z) ball++;
if(baseball[j][2]!==ball) break;
if(j===baseball.length-1) answer++;
}
}
return answer;
}
728x90
'알고리즘 문제 > [프로그래머스] Lv2' 카테고리의 다른 글
[프로그래머스] 카펫 (Lv2) (0) | 2020.07.11 |
---|---|
[프로그래머스] 단체사진 찍기 (Lv2) (0) | 2020.07.10 |
[프로그래머스] H-Index (Lv2) (0) | 2020.07.10 |
[프로그래머스] 위장(Lv2) (0) | 2020.07.09 |
[프로그래머스] 괄호변환(Lv2) (0) | 2020.07.08 |
Comments