2022/01/20) 5. K번째 큰 수 [완전탐색(블루투포스)]

굥굥이·2022년 1월 20일
0
post-thumbnail

1. 문제

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

2. 해결 방법

  1. Set객체 생성(Set은 중복이 허용되지 않는 객체이기 때문. 이미 같은 값이 존재하면 추가하지 않음). 같은 값들이 있을 경우 동일 순위로 한다고 했기 때문에, 굳이 같은 값들을 넣을 필요 없으므로.
  2. 3개의 for문을 돌려서 3개의 카드를 뽑는데, 돌리는 범위를 정확하게 설정하려면 n-2라고 해줘야 하지만 굳이 그렇게 하지 않아도 된다.
  3. Set은 add로 값을 넣어준다!
  4. Set은 sord를 사용하지 못하므로 Array.from으로 Set을 배열로 바꿔준 후, sort해준다.

! 추가 개념
-> Array.from()

  • 배열 초기화하는 기능도 있지만, Set을 배열로 바꿀 때도 쓴다!(Set은 sort를 사용하지 못하기 때문)

3. 정답

        <script>
            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));
        </script>
profile
아자아자 파이띵굥!

0개의 댓글