일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 백준
- 20365번
- 16439번
- 2422번
- 1926번
- node.js
- 7526번
- 5014번
- 13913번
- 1969번
- 알고리즘
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
- 17626번
- 풀이
- 16953번
- 5427번
- 나이트의이동
- 자바스크립트
- 타입스크립트 프로그래밍
- 14940번
- 정리
- 1541번
- javascript
- 123만들기
- 토마토
- 20300번
- 맥주마시면서걸어가기
- 2503번
- 6593번
- 타입스크립트
Archives
- Today
- Total
Sqsung DevLog
[백준] 2503번: 숫자 야구 - Node.js (자바스크립트) 본문
1. 문제 ㅡ 2503번: 숫자 야구 (난이도: Silver III)
2503번: 숫자 야구
첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트
www.acmicpc.net
2. 풀이 ㅡ Node.js (자바스크립트)
const input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
const N = +input.shift();
const calls = input.map(row => row.split(' '));
const testViability = stringNum => {
let count = 0;
for (let i = 0; i < N; i++) {
let strike = 0;
let ball = 0;
for (let j = 0; j < 3; j++) {
const jOfCalledNum = calls[i][0][j];
const jOfParamNum = stringNum[j];
if (jOfCalledNum === jOfParamNum) {
strike += 1;
} else if (stringNum.includes(jOfCalledNum)) {
ball += 1;
}
}
if (strike !== +calls[i][1] || ball !== +calls[i][2]) break;
count += 1;
}
return count === N ? 1 : 0;
};
const testViableNumbers = () => {
let answer = 0;
for (let i = 1; i < 10; i++) {
for (let j = 1; j < 10; j++) {
if (i === j) continue;
for (let k = 1; k < 10; k++) {
if (k === i || k === j) continue;
const viableNumber = `${i}${j}${k}`;
answer += testViability(viableNumber);
}
}
}
return answer;
};
console.log(testViableNumbers());
2-1. 풀이 설명
함수를 두 개 만들어서 문제에 접근했다.
testViableNumbers 함수에서는 조건에 맞는 숫자를 생성한다. 즉, 서로 다른 세 개의 숫자로 구성된 세 자리 수를 3중 반복문을 통해 생성하고, 해당 숫자를 인수로 testViability 함수를 호출한다.
testViability 함수는 영수가 생각하고 있을 가능성이 있는 답의 총 개수를 나타내는 answer 변수에 1 or 0을 추가할지 결정해주는 헬퍼 함수며, 다음과 같은 역할을 한다.
1. 인수로 받은 숫자(즉, testViableNumbers 함수에서 생성된 임의의 세자리 수)와 영수가 부른 숫자를 비교하여 스트라이크와 볼 개수가 일치하는지 확인한다. 이때 스트라이크와 볼 개수가 일치하면 count를 1씩 증가시킨다.
2. 반복문이 종료된 후 count가 영수의 추측 횟수(N)과 일치하면 1, 아니면 0을 반환하고, 이는 answer 변수에 누적된다.
모든 함수 로직이 끝난 후 answer 변수를 출력하면 된다.
'Algorithm' 카테고리의 다른 글
[백준] 17626번: Four Squares - Node.js (자바스크립트) (0) | 2023.06.15 |
---|---|
[백준] 14501번: 퇴사 - Node.js (자바스크립트) (0) | 2023.06.15 |
[백준] 9205번: 맥주 마시면서 걸어가기 - Node.js (자바스크립트) (0) | 2023.06.14 |
[백준] 13305번: 주유소 - Node.js (자바스크립트) (0) | 2023.06.13 |
[백준] 20115번: 에너지 드링크 - Node.js (자바스크립트) (0) | 2023.06.13 |