문제
https://school.programmers.co.kr/learn/courses/30/lessons/181851
풀이
일단..문제를 보고 든 생각, 배열에서 true만 뽑아 랭크 : 번호 로 할당된 객체를 만든다.
객체는 key가 숫자일 경우 자동적으로 오름차순 정렬되기 때매 랭크 순서대로 정렬된 값을 구할 수 있다.
다음 Object.values 를 통해 배열로 변경해 순서대로 3개를 꺼낸다
(무조건 3개 이상의 값을 가진다는 조건이 있으니 등수가 모자랄 경우는 고려하지 않음)
function solution(rank, attendance) {
//배열 합쳐서 객체 만들기
const obj = rank.reduce((acc, cur, i) => {
if (attendance[i]) {
//true인 경우만 랭크 : 번호 로 넣기
acc[cur] = i;
}
return acc;
}, {});
//객체 속성에서 숫자 키는 자동적으로 오름차순 정렬됨
const [a, b, c, ...rest] = Object.values(obj);
//10000 × a + 100 × b + c
return a * 10000 + b * 100 + c;
}
다른 풀이
배열을 돌며 rank와 인덱스를 합쳐 [rank, index] 형식으로 만들어준다.
여기서 ture인 애들만 필터를 통해 걸러내고 오름차순 정렬한다.
그러면 a,b,c에는 [rank, index] 형태로 상위 3개의 배열이 담겨있게 된다.
최종적으로 a[1] 같이 인덱스 번호를 가져와 연산을 수행한다.
function solution(rank, attendance) {
const [a, b, c] = rank
.map((r, i) => [r, i])
.filter(([_, i]) => attendance[i])
.sort(([a], [b]) => a - b);
return 10000 * a[1] + 100 * b[1] + c[1];
}
'개발 > 알고리즘(코딩테스트)' 카테고리의 다른 글
프로그래머스, 자바스크립트) 저주의 숫자 3 (3) | 2024.03.12 |
---|---|
프로그래머스, 자바스크립트) 치킨 쿠폰 (0) | 2024.03.09 |
프로그래머스, 자바스크립트) 등수 매기기 (0) | 2024.03.08 |
프로그래머스, 자바스크립트) 직사각형 넓이 구하기 (1) | 2024.03.07 |
프로그래머스, 자바스크립트) 캐릭터의 좌표 (0) | 2024.03.07 |