본문 바로가기

Programming/데일리 알고리즘

[HackerRank] Luck Balance (javascript)

그리디 알고리즘 문제 유형이다.

 

두 가지 조건에 맞게 내림차순한다. 

  1. T[i]이 다를 경우 내림차순 
  2. T[i]이 같을 경우 L[i]을 내림차순 

내림차순한 배열을 순회하며 더하는데, 진 경기일 경우에는 값을 뺀다. 

진 경기는 다음 조건을 만족하는 경기이다. 

k <= i && contests[i][1] === 1
function luckBalance(k, contests) {
    // Write your code here
  contests.sort((a, b) => {
    if (a[1] !== b[1]) {
      return b[1] - a[1];
    } else {
      return b[0] - a[0];
    }
  });

  let answer = 0;
  for (let i = 0; i < contests.length; i++) {
    // 최소 k(인덱스로는 k-1번)만큼은 져야하므로, T[i]가 1이고 i가 k번째부터는 이기는 경기이다. 
    if (k <= i && contests[i][1] === 1) {
      answer -= contests[i][0];
    } else {
      answer += contests[i][0];
    }
  }

  return answer;
}