[JS알고리즘] K번째 큰수



현수는 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));
  1. Set() 연산자를 사용하여 중복제거 ( 여러개가 있어도 중복된 값을 한번만 들어간다 )
  2. 3개의 카드를 고르기 때문에 3중for문을 사용한다
  3. tmp에 중복이 제거된 숫자들을 넣는다
  4. sort함수는 set연산자에 바로 적용되지 않으므로 새로운 배열을 만들어서 sort해준다. 내림차순 순으로
  5. k번째 큰 값이기 때문에 인자로 받은 k에서 -1 해준다(배열이라 0부터 시작하기 때문에 )



inflearn 자바스크립트 알고리즘 강의 내용 =)




© 2018. by sora

Powered by sora