😈 등수 매기기
📗 문제 설명
영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score
가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.
👀 제한사항
- 0 ≤
score
[0],score
[1] ≤ 100 - 1 ≤
score
의 길이 ≤ 10 score
의 원소 길이는 2입니다.score
는 중복된 원소를 갖지 않습니다.
📃 입출력 예
score | result |
---|---|
[[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등은 없습니다.
💎나의 풀이
이차원 배열은 정말 싫다.
풀기전에 순위에 개념을 파악해보자.
예를 들어 3위보다 높은 사람은 2명이다. 여기서 +1 을 해주면 3등이 된다.
그렇다면 문제는 간단하다. 기준이 되는 값의 높은값을 구하고 거기에 +1 해주면 된다.
1차로 순회한 값과 2차로 순회한 값을 비교하여 1차 값보다 큰 2차값들의 개수를 뽑아내보자.
우선 map을 통해 1차적으로 평균값을 순회 해주었다.
const solution = score => score.map(v => (v[0]+v[1])/2);
이렇게 나온 값을 2차적으로 map 내부에서 filter를 사용하여 더 큰값들을 걸러주자.
const solution = score => score.map(v => score.filter(s => (s[0]+s[1])/2 > (v[0]+v[1])/2));
// result
[
[]
[
[80,70]]
[
[80,70]
[90,50]
[50,80]]
[
[80,70]
[90,50]]]
잘 걸러진 점수의들 길이에 +1 을 해주면
const solution = score => score.map(v => score.filter(s => (s[0]+s[1])/2 > (v[0]+v[1])/2).length+1);
// result
[1,2,4,3]
문제에서 요구하는 순위가 나온다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 😈] JavaScript 로그인 성공? (0) | 2023.10.24 |
---|---|
[프로그래머스 😈] JavaScript 치킨 쿠폰 (0) | 2023.10.24 |
[프로그래머스 😈] JavaScript 점의 위치 구하기 (0) | 2023.10.24 |
[프로그래머스 😈] JavaScript 양꼬치 (0) | 2023.10.24 |
[프로그래머스 😈] JavaScript 배열의 길이를 거듭제곱으로 만들기 (0) | 2023.10.20 |