요격 시스템

A 나라가 B 나라의 중요 군사 기지를 공격하였습니다. B 나라는 최소한의 비용으로 모든 공격을 막으려고 합니다. 이를 위해, 각 공격이 X축에 평행한 직선으로 표현되며, 요격 미사일은 특정 X 좌표에서 수평으로 발사되어 모든 걸치는 공격을 한 번에 막을 수 있습니다. 하지만 공격의 시작과 끝점에서 발사하는 요격 미사일로는 공격을 막을 수 없습니다. 주어진 공격 목록을 바탕으로, 모든 공격을 막기 위해 필요한 최소한의 요격 미사일 수를 반환하는 함수를 완성해야 합니다.

요격 시스템Lv.2

181188

https://school.programmers.co.kr/learn/courses/30/lessons/181188

해설

이 함수는 2차원 배열 targets을 받아 처리하는 역할을 합니다. 각 배열은 2개의 요소로 구성되어 있으며, 이 함수의 목적은 이 배열들을 특정 기준에 따라 정렬하고 필터링하여, 일종의 "솔루션"을 구하는 것입니다. 이 코드는 아마도 간격 스케줄링 문제를 해결하기 위한 것으로 보입니다. 이 문제는 간격들을 가능한 한 많이 선택하되, 선택된 간격들이 서로 겹치지 않도록 하는 것입니다.

  • Name
    targets.sort((a, b) => a[0] - b[0]);
    Type
    Description

    이 코드는 targets 배열을 첫 번째 요소를 기준으로 오름차순 정렬합니다.

  • Name
    let checkAnswer = null;
    Type
    Description

    checkAnswer 변수는 현재 선택된 간격을 추적합니다.

  • Name
    for 반복문
    Type
    Description

    모든 배열을 순회하며, 이 배열이 현재 선택된 배열과 겹치는지 검사합니다.

    if (checkAnswer && checkAnswer[1] > targets[i][0]) : 현재 배열이 이전에 선택된 배열과 겹치는 경우 (즉, 현재 배열의 시작점이 이전 배열의 끝점보다 앞에 있는 경우), 이전 배열의 끝점을 현재 배열의 끝점과 이전 배열의 끝점 중 작은 값으로 설정합니다. 이렇게 하면 겹치는 부분이 최소화됩니다. 그렇지 않으면 (즉, 현재 배열이 이전에 선택된 배열과 겹치지 않는 경우), 이 배열을 선택하고 answer 값을 1 증가시킵니다.

요격 시스템

function solution(targets) {
  let answer = 0;
  targets.sort((a, b) => a[0] - b[0]);

  let checkAnswer = null;

  for (let i = 0; i < targets.length; i++) {
    if (checkAnswer && checkAnswer[1] > targets[i][0]) {
      checkAnswer[1] = Math.min(checkAnswer[1], targets[i][1]);
    } else {
      checkAnswer = targets[i];
      answer++;
    }
  }
  return answer;
}