백준 1546 평균 [JavaScript]

김한주·2022년 11월 3일
0

문제

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

출력

첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.

예제 입력 1

3
40 80 60

예제 출력 1

75.0

예제 입력 2

3
10 20 30

예제 출력 2

66.666667

풀이

//새로운 평균을 출력한다.
var fs = require('fs')
var input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');   

var subject = input[0];
var score = input[1].split(' ').map(el => Number(el)); //점수를 배열로 저장
var max = Math.max(...score);   //최댓값 구하기
var newScore = score.map(el => el/max*100);     //새로운 점수 저장

//평균 구하기
var avg = 0;
for(let i=0; i<subject; i++){  
    avg += newScore[i];
}
var newAvg= avg / subject;
console.log(newAvg);

해설

점수를 map을 통해 새로운 배열로 저장하고, Math.max로 최댓값을 구한다. 새로운 점수를 newScore 배열로 저장하고 과목의 개수만큼 반복하며 평균을 구하였다.

  • map() 메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환한다.

  • Math.max()함수는 입력값으로 받은 0개 이상의 숫자 중 가장 큰 숫자를 반환한다.

  • 전개 구문을 사용하면 배열이나 문자열과 같이 반복 가능한 문자를 0개 이상의 인수 (함수로 호출할 경우) 또는 요소 (배열 리터럴의 경우)로 확장하여, 0개 이상의 키-값의 쌍으로 객체로 확장시킬 수 있다.

function sum(x, y, z) {
  return x + y + z;
}

const numbers = [1, 2, 3];

console.log(sum(...numbers));
// expected output: 6
var arr = [1, 2, 3];
var arr2 = [...arr]; // arr.slice() 와 유사
arr2.push(4);

// arr2 은 [1, 2, 3, 4] 이 됨
// arr 은 영향을 받지 않고 남아 있음

...을 사용하여 배열을 복사할 수 있다.

profile
HANJUMON의 성장과정!

0개의 댓글