프로그래머스 0단계 - 등수 매기기

이종현·2024년 1월 13일
0

코딩테스트

목록 보기
13/24
post-thumbnail

문제 설명

영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 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. 문제 이해

  • input값은 크기 않기 때문에 시간복잡도는 문제 없음
  • 10명 이하의 학생들의 수학점수와 영어점수의 평균을 가지고 등수 구하기
  • 공동이 존재하면 앞의 숫자로 등수를 매기고 뒤의 숫자는 생략

2. 접근 방법

  • 직관적으로 생각하기
    • score 배열을 map해서 안에 있는 요소 배열의 평균값을 mapping 한다.
    • 새롭게 mapping된 배열에서 등수를 구한다.
      • mapping된 배열을 정렬한 새로운 배열을 선언하고
      • 기존에 mapping된 배열의 값을 정렬된 배열에서 인덱스로 찾는다.

3. 코드 설계

  • 직관적으로 생각하기
    • averageArr = scores.map(score ⇒ score.reduce((a,b) ⇒ (a + b) /2 ))
    • sortAverageArr = averageArr.sort()
    • for(let i = 0; i < averageArr.length; i++)
    • const index = sortAverageArr.indexOf(averageArr[i])
    • const rank = []
    • rank.push(index + 1)

4. 코드 구현

function solution(scores) {
  averageArr = scores.map((score) => score.reduce((a, b) => (a + b) / 2))
  sortAverageArr = [...averageArr].sort((a, b) => b - a)

  const rank = []

  for (let i = 0; i < averageArr.length; i++) {
    rank.push(sortAverageArr.indexOf(averageArr[i]) + 1)
  }

  return rank
}

다른 사람 풀이

function solution(score) {
  return score.map((el) => {
    return (
      score.filter((v) => (v[0] + v[1]) / 2 > (el[0] + el[1]) / 2).length + 1
    );
  });
}

회고

1시간 가까이 걸린 것 같다. indexOf를 생각해내지 못해서 오래걸리기도 했고, 한 번 안 풀릴 때는 계속 안 풀리는 경우가 많기 때문에 한 번 주의를 환기시킨 다음에 다시 도전하는 게 효율적일 때도 있으니 다음부터는 그 방법도 사용해보자.

profile
데이터리터러시를 중요하게 생각하는 프론트엔드 개발자

0개의 댓글