주어진 카드 중에 3장을 뽑아서 더한 값들 중 k번 째로 큰 수를 구하시오.
const solution = (k, cards) => {
let answer = [];
let n = cards.length;
for (let i = 0; i < n; i++) {
let sum = 0;
//첫번째 카드 뽑기
for (let j = i + 1; j < n; j++) {
//두번째 카드 뽑기
for (let k = j + 1; k < n; k++) {
// 세번째 카드 뽑기
sum = cards[i] + cards[j] + cards[k];
// 중복 제거
if (answer.indexOf(sum) === -1) answer.push(sum);
}
}
}
answer.sort((a, b) => b - a);
return answer[k - 1];
}
let cards = [13, 15, 34, 23, 45, 65, 33, 11, 26, 42];
console.log(solution(3, cards));
중복 제거를 위해 Set
객체를 사용할 수 있다.
Set
객체는 값 콜렉션으로, 삽입 순서대로 요소를 순회할 수 있습니다. 하나의 Set
내 값은 한 번만 나타날 수 있습니다. 즉, 어떤 값은 그 Set
콜렉션 내에서 유일합니다. - MDN
Set
객체를 배열로 만들기 위해서는 Array.from()
을 사용한다.
const s = new Set(['foo', window]);
Array.from(s);
// ["foo", window]