29주차 알고리즘

이동규·2024년 9월 26일

코테

목록 보기
20/22

예상 대진표

function solution(n = 8, a = 4, b = 7) {
  let answer = 1;
  let arr = new Array(n);

  for (let index = 0; index < arr.length; index++) {
    arr[index] = index + 1;
  }

  while (arr.length > 1) {
    let tmpArr = [];
    for (let index = 0; index < arr.length; index += 2) {
      if (
        arr[index] !== a &&
        arr[index] !== b &&
        arr[index + 1] !== a &&
        arr[index + 1] !== b
      ) {
        tmpArr.push(arr[index]);
      } else if (
        (arr[index] === a || arr[index] === b) &&
        (arr[index + 1] === a || arr[index + 1] === b)
      ) {
        return answer;
      } else if (arr[index] === a || arr[index] === b) {
        tmpArr.push(arr[index]);
      } else if (arr[index + 1] === a || arr[index + 1] === b) {
        tmpArr.push(arr[index + 1]);
      }
    }
    ++answer;
    arr = tmpArr;
  }
 
  return answer;
}

귤고르기

function solution(k = 1, tangerine = [1]) {
  let answer = 0;
  let map = new Map();
  tangerine.forEach((el, i) => {
    if (tangerine.indexOf(el) === i) {
      map.set(el, 1);
    } else if (map.has(el)) {
      map.set(el, map.get(el) + 1);
    }
  });

  const values = Array.from(map.values()).sort((a, b) => b - a);

  for (let index = 0; index < values.length; index++) {
    k -= values[index];
    ++answer;

    if (k <= 0) {
      return answer;
    }
  }
}

연속 부분 수열 합의 개수

function solution(elements = [7, 9, 1, 1, 4]) {
  let l = elements.length;
  let set = new Set();
  for (let index = 0; index < elements.length; index++) {
    let v = elements[index];
    set.add(v); // 한개 선택
    for (let j = index + 1; j < index + l; j++) {
      //index가 포함된 모든 값
      v += elements[j % l];
      console.log(v);
      set.add(v);
    }
  }

  return set.size;
}

0개의 댓글