자료구조 및 알고리즘/JavaScript Practice

[프로그래머스] 전국 대회 선발 고사

Ryomi 2024. 12. 12. 22:03
728x90
반응형

24년 12월 12일
해결한 문제 갯수: 10

 

문제 설명

 

문제 분석

- 학생들의 순위(rank)와 참가 가능 여부(attendance)를 기반으로 특정 조건을 만족하는 학생들을 선발하고, 그 결과를 계산하는 문제입니다.

- rank: 각 학생의 시험 점수 순위가 적힌 배열

- attendance: 각 학생의 참가 가능 여부(true/false)가 적힌 배열

- 참가 가능한 학생들 중 순위가 가장 높은 3명을 선발합니다.

- 선발된 학생들의 인덱스를 사용하여 10000a + 100b + c 계산합니다.

 

 

접근: 메소드 체이닝

function solution(rank, attendance) {
    return attendance
        .map((el, i) => el ? i : '')
        .filter(el => el !== '')
        .sort((a, b) => rank[b] - rank[a])
        .slice(-3)
        .reduce((a, c, i) => a + c * Math.pow(100, i))
}

 

1) 참석 가능한 학생 찾기

: attendance 배열을 순회하며 참석 가능한 학생의 인덱스를 반환합니다.

: 참석 불가능한 학생의 경우, 빈 문자열('')을 반환합니다. 

2) 배열의 불필요한 요소 제거

: 배열에서 falsy 값("")을 제거합니다. 

3) 순위별 정렬

: sort()를 사용해 학생들의 순위를 기준으로 정렬합니다. 

4) 상위 3명 선택

: 배열에서 상위 3명을 선택합니다.

5) 최종 계산

- 선택된 3명의 인덱스를 사용해 최종 값을 계산을 합니다. 

- Math.pow(100, i)는 i값에 따라 다음과 같은 값을 반환:

  • i = 0 : Math.pow(100, 0) = 1
  • i = 1 : Math.pow(100, 1) = 100
  • i = 2 : Math.pow(100, 2) = 10000
728x90
반응형