CODE KATA #27

loopbackseal·2021년 2월 27일
0

CODE KATA 🧗‍♂️

목록 보기
27/32
post-thumbnail

K번째 큰 합

현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가 여러장 있을 수 있습니다. 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다. 기록한 값 중 K번째로 큰 수를 출력하는 프로그램을 작성하세요.
만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값 은 22입니다.

나의 풀이

            function solution(n, p, card){
                let answer = 0;
                card.sort((a,b) => {return b-a;});
                let li = [];
                for (let i = 0; i<n-2; i++) {
                    for (let j = i+1; j<n-1; j++) {
                        for (let k = j+1; k<n; k++) {
                            let sum = card[i]+card[j]+card[k];
                            if (li.indexOf(sum) === -1) li.push(sum);
                        }
                    }
                }
                li.sort((a,b) => {return b-a;});
                let max = Number.MAX_SAFE_INTEGER;
                let count = 0;
                for (let x of li) {
                    if(max > x) {
                        count++;
                        max = x;
                    }
                    if(count === p) {
                        answer = max;
                    }
                }
                return answer;
            }
            
            let arr=[13, 15, 34, 23, 45, 65, 33, 11, 26, 42];
            console.log(solution(10, 3, arr));

정답 풀이

            function solution(n, k, card){
                let answer;
                let tmp = new Set();
                for(let i=0; i<n; i++){
                    for(let j=i+1; j<n; j++){
                        for(let k=j+1; k<n; k++){
                            tmp.add(card[i]+card[j]+card[k]);
                        }
                    }
                }
                let a=Array.from(tmp).sort((a, b)=>b-a);
                answer=a[k-1];
                return answer;
            }
            
            let arr=[13, 15, 34, 23, 45, 65, 33, 11, 26, 42];
            console.log(solution(10, 3, arr));

Set()

MDN의 set 문서
중복을 허용하지 않는 set()의 특성을 활용하여, 나의 풀이에서 중복을 max변수를 통해 확인한 것과 달리, 바로 중복을 제거하고 해당 array에서 answer을 찾아냈다.

profile
CAU Business Administration

0개의 댓글