K 번째 큰 수

지창언·2022년 8월 3일
0

codingTest

목록 보기
26/29

Index

1.문제
2.내 코드
3.발전시킨 코드


문제

1~ 100 사이의 숫자 N 개가 입력됩니다.
이 중 세 개의 숫자를 골라서 합하여 나오는 모든 경우를 기록합니다.
기록한 값 중 K번째로 큰 수를 출력합니다.
(중복값은 무시합니다.)
예시)
입력:
n, k
숫자 N개
10 3
13 15 34 23 45 65 33 11 26 42

출력:
143


내 코드

<script>
    function solution(n,k,card){
        let sumNumbers = [];
        for(let i=0;i <n; i++){
            for(let j=i+1; j<n;j++){
                for(let k=j+1;k<n;k++){
                    sumNumbers.push(card[i]+card[j]+card[k]);
                }
            }
        }
        sumNumbers.sort((a,b)=>b-a);
        sumNumbers = new Set(sumNumbers);
        sumNumbers = Array.from(sumNumbers);
        return sumNumbers[k-1];
    }
    
    let arr=[13, 15, 34, 23, 45, 65, 33, 11, 26, 42];
    console.log(solution2(10, 3, arr));
</script>
  1. 3중 for loop 을 통해 3가지 수가 뽑히는 모든 경우의 수를 배열에 저장합니다.
  2. 배열을 내림차순으로 정렬합니다.
  3. 배열을 Set() 자료구조로 바꿉니다. (set 자료형은 중복이 자동제거됩니다.)
  4. 이를 다시 배열로 바꾸고 k번째 수를 출력합니다.

발전시킨 코드

<script>
    function solution2(n,k,card){
        let answer;
        let temp = 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++){
                    temp.add(card[i]+card[j]+card[k]);
                }
            }
        }
        temp = Array.from(temp).sort((a,b)=>b-a);
        return temp[k-1];
    }
    let arr=[13, 15, 34, 23, 45, 65, 33, 11, 26, 42];
    console.log(solution2(10, 3, arr));
</script>

위 코드와 크게 다른 것은 없지만,
처음부터 set 자료형에 세 수의 합을 저장하여 나중에는 배열화 한번으로 중복을 제거한 배열을 만들 수 있습니다.
코드 간소화 ..


profile
프론트엔드 개발자가 되고 싶은...

0개의 댓글