개발 기록 남기기✍️

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

코딩 테스트 연습

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

너해동물원 2022. 12. 31. 16:05

🗒️ 문제 설명

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

 

 

⚠️ 제한 사항

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

 

 

👀 입출력 예

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

❇️ 나의 풀이

  • 먼저 배열을 forEach로 돌면서 각 아이템의 배열 아이템의 평균값을 반환하는 배열을 반환한다.
  • 등수를 반환할 배열을 만드는데, 모든 학생들이 1등부터 등수가 시작하도록 한다.
    • Array.from() 메서드는 유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운 Array를 만든다.
    • Array.from()의 매개변수에 {length:n}인 객체를 넣어주면  n 길이의 유사 배열 객체를 생성한다.
    • Array.from()의 유사 배열 객체를 통해 만들어질 배열에 콜백함수를 통해 어떤 값을 넣을지 정할 수 있다. 지금 문제의 경우, () => 1로 모든 item에 1을 줬다.
    • 등수를 구하기 위해서는 중첩 for문을 사용한다.  arr[i]보다 arr[j]가 더 크다면 answer[i] 값을 1씩 늘려주면 된다. (같거나 작으면 값 늘어나지 않음)
function solution(score) {
	// 평균값 담은 배열 만들기
    var arr = [];
    score.forEach(v => {
        arr.push((v[0] + v[1]) / 2)
    })
    // 등수 반환할 배열 만들기
    const len = arr.length;
    const answer = Array.from({length : len}, () => 1); 
    
    // 등수 구하기
    for(i=0;i<len;i++){
        for(j=0;j<len;j++){
            arr[i] < arr[j] ? answer[i]++ : answer
        }
    }
    return answer
}