[220213] TIL

릿·2022년 2월 13일
0

코딩테스트

목록 보기
15/27

K번째 큰 수 (완전탐색)

  1. 문제: 1부터 100 사이의 자연수가 적힌 N장의 카드가 있는데 3장을 뽑을 수 있는 모든 경우를 기록한다. 기록한 값 중 K번째로 큰 수를 출력하라. (카드는 중복 숫자도 있음.)

  2. 고민했던 점
    -문제 복사하다가 set객체가 눈에 들어와서 아, set을 써서 중복을 제거하는구나! 해서
    1) 3중 for문을 돌려 3개씩 뽑아서 합을 tmpArr에 push해넣기.
    2) 중복제거 (set객체 사용).
    3) sort함수로 내림차순정렬한 후, splice함수로 k번째 숫자를 answer에 저장.
    ...를 할 생각이었다.
    나중에 생각해보니 set은 배열이 아니라서 sort함수도 안 먹히고 splice도 당연히 안 먹힌다...ㅎ

  3. 쌤 풀이
    -set객체를 선언 후에, 3중 for문에서 합쳐진 수를 add로 더하고, set을 Array.from로 배열화 시킨 후에 sort 내림차순 정렬, answer에는 k-1번째 배열을 저장한다.

function solution(n, k, card){
    let answer=0;
    let tmp = new Set(); // 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); // set은 sort함수를 지원하지 않으므로 배열화 한다.
    answer=a[k-1];
    return answer;
}

let arr=[13, 15, 34, 23, 45, 65, 33, 11, 26, 42];
console.log(solution(10, 3, arr));
  1. 결론
    set객체는 역시 어렵다ㅠㅠ... 조금 더 공부해봐야지.
    신박했던 건 Array.from쓰고 뒤에 바로 sort를 이어쓰는 점이라던지, answer=a[k-1]; 이런식으로 바로 배열을 변수에 저장하는 게 가능했다는 점!
    (이런걸 전혀 생각 못했다는 나 자신도 참 신기하다 ㅎㅎ... 어찌 splice를 쓸 생각을 한 거지?;)
profile
새로운 도전과 재미를 추구하는 프론트엔드 개발자

0개의 댓글

관련 채용 정보