알고리즘 문제 풀이
[Node.js] Baekjoon 3052 나머지 풀이
SuhyeokRoh
2024. 5. 30. 19:32
숫자 10개를 입력받아 이를 42로 나눈 서로 다른 나머지 값의 개수를 구하여라.
접근 방식
0이 42개 있는 array를 생성 후, 입력받은 값을 42로 나눈 값에 해당하는 인덱스에 1씩 더한다.
이 후 array에서 0보다 큰 값이 있는 인덱스의 개수를 구해 출력한다.
구현 코드
let rl = require('readline').createInterface({
input: process.stdin,
output: process.stdout,
})
let input = [];
rl.on('line', li=>{
input.push(Number(li.trim()));
}).on('close', _ => {
remainder(input);
process.exit();
});
function remainder(lst) {
let arr = Array(42).fill(0);
lst.forEach(el => {
arr[el%42]++;
})
const rst = arr.reduce((acc, cur) => {
if(cur > 0) {
return acc + 1;
} else {
return acc
}
}, 0)
console.log(rst)
}
입력받는 숫자를 파일에서 읽는 과정은 이전 Node.js 입력받는 방법 포스팅 참조
- 숫자를 입력받을 때, trim 함수를 통해 공백이나 불필요한 문자열 제거 후, 숫자로 변환하여 array에 추가
- 입력받은 숫자가 들어있는 array를 forEach를 통해 요소 하나씩 돌아가며 나머지 계산
- reduce문을 활용하여 현재 값이 0보다 크면(해당 인덱스의 값에 해당하는 나머지가 존재) 개수 값에 1을 추가
- 결과값을 출력 후, process 종료
서로 다른 나머지 값의 개수을 계산할 때, reduce 함수가 아닌 forEach 함수를 통해서도 구할 수 있지만 하나의 값을 반환한다는 점에서 reduce 함수를 적용했음
Reduce 함수
reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.
구문
arr.reduce(callback[, initialValue])
callback
- 배열의 각 요소에 대해 실행할 함수, 4가지 인수를 받음
- Accumulator
- 콜백의 반환값을 누적
- 콜백의 이전 반환값 또는 콜백의 첫 번째 호출이면서 initialValue를 제공한 경우에는 initialValue 값
- currentValue
- 처리할 현재 요소
- currentIndex
- 처리할 현재 요소의 인덱스
- initialValue를 제공한 경우 0, 아니면 1부터 시작함
- Array
- reduce를 호출한 배열
initailValue
- callback의 최초 호출에서 첫 번째 인수에 제공하는 값으로, 초기 값을 제공하지 않으면 배열의 첫 번째 요소를 사용함.
(빈 배열에서 초기값없이 reduce 호출 시, 오류 발생)
참고 사이트
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
Array.prototype.reduce() - JavaScript | MDN
reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.
developer.mozilla.org