K번째 큰 수 (완전 탐색)

문제

주어진 카드 중에 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]

Set
Set.prototype
Array.from()

좋은 웹페이지 즐겨찾기