일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- cosine similarity metric
- go
- Buffered channel
- http 413
- GoF
- 윈도우키보드
- m4 pro
- 오블완
- notification system
- golang
- 티스토리챌린지
- body size
- gitops
- goland
- apollo router
- Intellij
- 코사인 유사성 메트릭스
- 대규모 시스템 설계
- 배포 파이프라인
- AWS
- UnBuffered channel
- 사설 ip
- intellij ide
- 배포 프로세스
- Kubernetes
- Logrus
- Infra
- 디자인패턴
- elasticsearch
- kube-prometheus-stack
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] (0) | 2019.12.12 |
Comments