0번부터 n - 1번까지 n명의 학생 중 3명을 선발하는 전국 대회 선발 고사를 보았습니다. 등수가 높은 3명을 선발해야 하지만, 개인 사정으로 전국 대회에 참여하지 못하는 학생들이 있어 참여가 가능한 학생 중 등수가 높은 3명을 선발하기로 했습니다.
각 학생들의 선발 고사 등수를 담은 정수 배열 rank
와 전국 대회 참여 가능 여부가 담긴 boolean 배열 attendance
가 매개변수로 주어집니다. 전국 대회에 선발된 학생 번호들을 등수가 높은 순서대로 각각 a, b, c번이라고 할 때 10000 × a + 100 × b + c를 return 하는 solution 함수를 작성해 주세요.
rank
의 길이 = attendance
의 길이 ≤ 100rank[i]
는 i
번 학생의 선발 고사 등수를 의미합니다.rank
의 원소는 1부터 n까지의 정수로 모두 서로 다릅니다.attendance[i]
는 i
번 학생의 전국 대회 참석 가능 여부를 나타냅니다.
attendance[i]
가 true라면 참석 가능, false면 참석 불가능을 의미합니다.attendance
의 원소 중 적어도 3개는 true입니다.rank | attendance | result |
---|---|---|
[3, 7, 2, 5, 4, 6, 1] | [false, true, true, true, true, false, false] | 20403 |
[1, 2, 3] | [true, true, true] | 102 |
[6, 1, 5, 2, 3, 4] | [true, false, true, false, false, true] | 50200 |
입출력 예 #1
입출력 예 #2
입출력 예 #3
function solution(rank, attendance) {
let go = rank.map((e,i)=>[e,i]).filter((e,i)=>attendance[i]).sort((a,b)=>a[0]-b[0]);
return go[0][1]*10000+go[1][1]*100+go[2][1];
}
sort()
사용법!
다른풀이
function solution(rank, att) {
return Object.entries(rank).filter((_, i) => att[i])
.sort(([,a], [,b]) => a-b) // 이렇게도 사용 가능
.slice(0, 3).reduce((a, [b], j)=> a + b*(100**(2-j)), 0)
}