| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- 관측 가능성
- blank import
- go-sql-driver
- esbuild
- javascript
- 통합 로깅 시스템
- 구조체
- 캡슐화
- elasticsearch
- Intellij
- RDS
- Infra
- Kubernetes
- GoF
- 오블완
- context7
- replication lag
- goland
- logging
- MSA
- typescript
- 티스토리챌린지
- golang
- 디자인패턴
- AWS
- go
- GIT
- database/sql
- AI
- sqs fifo queue
Archives
- Today
- Total
Fall in IT.
프로그래머스 코딩테스트 [완전탐색] - 숫자 야구 본문
반응형
문제 설명
숫자 야구 게임이란 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 |
코드
function solution(baseball) {
let answer = 0;
/**
* 1. 각자리수가 다른 모든 경우의 수를 만들어준다.
* - [123] ~ [987]까지
* 2. 모든 경우의 수 배열을 순회하면서 baseball의 case에 만족하는지 확인한다.
*/
// 1. 각자리수가 다른 모든 경우의 수를 만들어준다.
let allCase = [];
for (let i = 1; i <= 9; i++)
{
for (let j = 1; j <= 9; j++)
{
if (i === j)
continue;
for (let k = 1; k <= 9; k++)
{
if (j === k || i === k)
continue;
allCase.push(""+i+j+k);
}
}
}
// 2. 모든 경우의 수 배열을 순회하면서 baseball의 case에 만족하는지 확인한다.
for (let i = 0; i < allCase.length; i++)
{
let flag = true;
for (let j = 0; j < baseball.length; j++)
{
let str = baseball[j][0].toString();
let strike = 0;
let ball = 0;
// 스트라이크 & 볼 갯수 확인
for (let k = 0; k < str.length; k++)
{
if (str[k] === allCase[i][k])
strike++;
else
{
if (str.indexOf(allCase[i][k]) !== -1)
ball++;
}
}
if (strike === baseball[j][1] && ball === baseball[j][2])
continue;
else
{
flag = false;
break;
}
}
if (flag)
answer++;
}
return answer;
}
console.log(solution([[123, 1, 1], [356, 1, 0], [327, 2, 0], [489, 0, 1]])); // 2
참조
https://programmers.co.kr/learn/courses/30/lessons/42841
반응형
'Algorithm' 카테고리의 다른 글
| 입력받은 문자열에 중복되는 문자가 있는지 확인 방법 (0) | 2022.08.30 |
|---|---|
| 프로그래머스 코딩테스트 [2018 KAKAO BLIND RECRUITMENT] - 뉴스 클러스터링 (0) | 2019.12.26 |
| 프로그래머스 코딩테스트 [스택/큐] - 쇠막대기 (0) | 2019.12.22 |
| 프로그래머스 코딩테스트 [2018 KAKAO BLIND RECRUITMENT] (0) | 2019.12.12 |
| 프로그래머스 코딩테스트 [2019 KAKAO BLIND RECRUITMENT] (1) | 2019.12.12 |
Comments