백준 1546번을 풀어보았다.
let [N, scores] = require('fs').readFileSync('/dev/stdin').toString().split('\n').map((i) => i.split(' ').map(Number))
const max = Math.max(...scores)
scores = scores.map((score) => score / max * 100)
let sum = 0
scores.forEach((score) => sum += score)
console.log(sum / N)
map 메소드를 사용해 scores 배열 내 점수들을 새로운 점수로 변경한 후
forEach 메소드를 사용해 scores 배열 내 점수들을 더해 sum을 구한 뒤 N으로 나눠 평균을 구하였다.
하지만 reduce 메소드를 사용하면 더 짧은 풀이가 가능하다.
reduce 메소드는 배열의 각 요소에 대해 주어진 함수를 실행하고 하나의 누적값을 반환한다.
먼저 reduce 메소드의 기본 형태는 다음과 같다.
배열.reduce(callback, initialValue)
- callback: 배열의 각 요소에 대해 실행할 함수로 다음의 네 가지 인수를 받는다.
- accumulator: 이전까지의 누적값
- currentValue: 현재 요소의 값
- currentIndex: 현재 요소의 인덱스
- array: reduce 메소드를 호출한 배열
- initialValue: accumulator의 초기값
이때 callback의 currentIndex, array와 initialValue는 필수값은 아니다.
reduce 메소드를 사용한 풀이는 다음과 같다.
let [N, scores] = require('fs').readFileSync('/dev/stdin').toString().split('\n').map((i) => i.split(' ').map(Number))
const max = Math.max(...scores)
const total = scores.reduce((sum, score) => sum += score / max * 100, 0)
console.log(total / N)
sum이라는 누적값에 score라는 현재 점수를 새로운 점수로 변경해 sum에 더한다.
이렇게 reduce 메소드를 사용하면 더 짧은 풀이가 가능하다.
💫 이 문제를 통해 배운 것
reduce 메소드는 배열의 각 요소에 대해 주어진 함수를 실행하고 하나의 누적값을 반환한다.
'Algorithm > Baekjoon' 카테고리의 다른 글
백준 11720번 (1) | 2024.11.08 |
---|---|
백준 2743번, 9086번 (0) | 2024.10.31 |
백준 10811번 (0) | 2024.10.31 |
백준 5597번 (0) | 2024.10.29 |
백준 10810번, 10813번 (0) | 2024.10.10 |