코딩테스트 뿌수기

[백준 2908번 node.js] 상수

hans-j 2024. 6. 9. 18:10

https://www.acmicpc.net/problem/2908

 

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성

 

해결과정 

 

1. 주어진 문자열을 숫자타입의 배열로 바꾼다.  배열로 바꿀때 선택자는 띄어쓰기 사용

input.split(' ')

2. 바꾼 배열의 숫자들을 거꾸로 정렬

input.reduce((accumulator,currentValue)=>{},0) //숫자타입으로 변환하니까 0으로 설정

 

3. 정렬한 두 개의 숫자를 비교하고더 큰 숫자를 숫자타입으로 반환

const reversedValue =  Number(Array.from(currentValue).reverse().join(''));
return reversedValue >  accumulator ? reversedValue :  accumulator

// 반환 할 변수 설정

// 현재의 값을 배열로 설정

// 배열로 설정한 현재의 값을 거꾸로 정렬하고 합쳐준다

// 반환할 값을 비교해서 더 큰값으로 설정

 

4. 완성

input.split(' ').reduce((accumulator, currentValue) => {
    const reversedValue = Number(Array.from(currentValue).reverse().join(''));
    return reversedValue > accumulator ? reversedValue : accumulator
}, 0)

 

5. 제출

const fs = require('fs');
const filePath = process.platform === "linux" ? '/dev/stdin' : __dirname + '/input.txt';
const input = fs.readFileSync(filePath).toString().trim();

console.log( input.split(' ').reduce((acc, curr) => {
    const reversedValue = Number(Array.from(curr).reverse().join(''));
    return reversedValue > acc ? reversedValue : acc
}, 0));

 


위에서 가장 중요하게 쓰인 메서드는 reduce();

 

accumulators (acc)는 반환값은 누적되기때문에

 

예를 들어서 input의 값이 `734 138` 일 경우에

첫번째 순회시 reversedValue 값은 437

왜냐하면 누적된 값이 없기때문에 0과 비교하기 때문이다.

 

0과 437을 비교하면 반환값은 437

 

두번째 순회시 reversedValue 값은 831

왜냐하면 누적된 값인 437과 비교하면 831이 더 크기때문이지!

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

 

Array.prototype.reduce() - JavaScript | MDN

reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.

developer.mozilla.org