[프로그래머스] 등수 매기기

한재창·2023년 6월 26일
0

등수 매기기

문제 설명

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

제한사항

  • 0 ≤ score[0], score[1] ≤ 100
  • 1 ≤ score의 길이 ≤ 10
  • score의 원소 길이는 2입니다.
  • score는 중복된 원소를 갖지 않습니다.

입출력 예

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

입출력 예 설명

입출력 예 #1

  • 평균은 각각 75, 70, 55, 65 이므로 등수를 매겨 [1, 2, 4, 3]을 return합니다.

입출력 예 #2

  • 평균은 각각 75, 75, 40, 95, 95, 100, 20 이므로 [4, 4, 6, 2, 2, 1, 7] 을 return합니다.
    공동 2등이 두 명, 공동 4등이 2명 이므로 3등과 5등은 없습니다.

나의 풀이

  1. score를 평균값으로 계산한 배열을 변수에 저장하고, 평균값을 얕은 복사를 통해 내림차순으로 정렬한다.

  2. 이중 for문을 돌려 평균 값으로 저장된 원소와 정렬된 값으로 저장된 원소를 비교해서 일치하면 answer 배열에 정렬된 값의 index+1의 값을 넣고 다음 값을 비교하기 위해 break; 한다.

  3. answer을 return 한다.

function solution(score) {
    const answer = [];
    const average = score.map((arr) => (arr[0] + arr[1]) / 2);
    const sorted = [...average].sort((a, b) => b - a);

    for(let i=0; i<average.length; i++) {
        for(let j=0; j<sorted.length; j++) {
            if(average[i] === sorted[j]) {
                answer.push(j+1);
                break;
            }
        }
    }

    return answer;
}

좋다고 생각한 코드

  1. score를 평균값으로 계산한 배열을 변수에 저장하고, 평균값을 얕은 복사를 통해 내림차순으로 정렬한다.

  2. 평균 값의 원소를 sorted.indexOf()에 넣어 정렬한 원소에서 같은 값일 때 index를 찾고 기존 원소 값에서 index+1의 원소로 바꾼 값을 return 한다.

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);
}
profile
취준 개발자

0개의 댓글