Level 0) 등수 매기기 ⭐️

Doozuu·2023년 1월 31일
0

프로그래머스 (JS)

목록 보기
33/183

문제 설명

영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.

입출력 예

score										result
[[80, 70], [90, 50], [40, 70], [50, 80]]	[1, 2, 4, 3]
[[80, 70], [70, 80], [30, 50], [90, 100]    [4, 4, 6, 2, 2, 1, 7]
, [100, 90], [100, 100], [10, 30]]				

풀이

  1. 평균 구하기
  2. 각 평균값을 비교하여 작으면 등수가 낮아지도록 하기

(원래 평균을 구한 후에 정렬해서 index를 이용해 구하고 싶었는데 indexOf 사용하는걸 생각하지 못하고 헤매다가 새로운 변수인 rank와 반복문을 이용해 구했다.)

function solution(score) {
    let average = score.map(([e,m]) =>(e+m)/2);
    let rank = Array(average.length).fill(1);
    for(i=0;i<average.length;i++){
        for(j=0;j<average.length;j++){
            if(average[i] < average[j]) rank[i]++;
        }
    }
    return rank;
}

원래 생각했던 방식의 풀이

정렬된 배열에서 평균값의 index를 찾아 1을 더해주면 된다.

function solution(score) {
    let avg = score.map(v=>(v[0]+v[1])/2);
    let sorted = avg.slice().sort((a,b)=>b-a);
    return avg.map(v=>sorted.indexOf(v)+1);
}

신박한 풀이

map안에 filter를 써서 각 값들을 비교하였고, 평균이 더 큰 값의 개수를 구해 1을 더해서 등수를 구해주었다.

function solution(score) {
  return score.map((el) => {
    return (
      score.filter((v) => (v[0] + v[1]) / 2 > (el[0] + el[1]) / 2).length + 1
    );
  });
}
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글