본문 바로가기
Algorithm/Baekjoon

백준 1546번

by minhi 2024. 10. 31.

백준 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