[JS알고리즘] K번째 큰수
in Algorithm
현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가여러장 있을 수 있습니다. 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다. 기록한 값 중 K번째로 큰 수를 출력하는 프로그램을 작성하세요.
만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19……이고 K값이 3이라면 K번째 큰 값은 22입니다.
function solution(n, k, card){
let answer;
let tmp = new Set(); //객체생성 연산자
for(let i=0; i<n; i++){ //n개의 카드중에서 3개의 카드를 뽑아야하니까 3중for 돌아야함
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));
Set()
연산자를 사용하여 중복제거 ( 여러개가 있어도 중복된 값을 한번만 들어간다 )- 3개의 카드를 고르기 때문에 3중for문을 사용한다
- tmp에 중복이 제거된 숫자들을 넣는다
- sort함수는 set연산자에 바로 적용되지 않으므로 새로운 배열을 만들어서 sort해준다. 내림차순 순으로
- k번째 큰 값이기 때문에 인자로 받은 k에서 -1 해준다(배열이라 0부터 시작하기 때문에 )
inflearn 자바스크립트 알고리즘 강의 내용 =)