K번째 큰 수 (완전탐색)
문제: 1부터 100 사이의 자연수가 적힌 N장의 카드가 있는데 3장을 뽑을 수 있는 모든 경우를 기록한다. 기록한 값 중 K번째로 큰 수를 출력하라. (카드는 중복 숫자도 있음.)
고민했던 점
-문제 복사하다가 set객체가 눈에 들어와서 아, set을 써서 중복을 제거하는구나! 해서
1) 3중 for문을 돌려 3개씩 뽑아서 합을 tmpArr에 push해넣기.
2) 중복제거 (set객체 사용).
3) sort함수로 내림차순정렬한 후, splice함수로 k번째 숫자를 answer에 저장.
...를 할 생각이었다.
나중에 생각해보니 set은 배열이 아니라서 sort함수도 안 먹히고 splice도 당연히 안 먹힌다...ㅎ
쌤 풀이
-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));