알고리즘
[Javascript] 프로그래머스 - 요격 시스템
J3SUNG
2025. 2. 25. 23:20
728x90
문제 설명
A 나라가 B 나라를 침공하며, B 나라의 전략 자원 보호를 위해 최소한의 요격 미사일을 사용하여 모든 폭격 미사일을 요격해야 합니다.
각 폭격 미사일은 (s, e)의 개구간으로 표현되며, 특정 x 좌표에서 y 축에 수평이 되도록 요격 미사일을 발사하면 해당 x 좌표에 걸쳐 있는 모든 폭격 미사일을 요격할 수 있습니다.
최소한의 요격 미사일 수를 구하는 문제입니다.
제한 사항
- 1 ≤ targets.length ≤ 500,000
- 0 ≤ s < e ≤ 100,000,000
- (s, e) 형태의 개구간으로 표현된 폭격 미사일은 s와 e에서 요격할 수 없음.
- 요격 미사일은 실수 x 좌표에서도 발사 가능.
해결 방법
알고리즘: 그리디(Greedy) 기법
- 폭격 미사일을 끝 지점 기준으로 오름차순 정렬합니다.
- 가장 먼저 끝나는 미사일의 종료 지점에 요격 미사일을 배치합니다.
- 이후 요격 미사일로 커버되지 않는 다음 미사일을 찾아 반복합니다.
- 이를 통해 최소한의 요격 미사일 수를 구할 수 있습니다.
시간 복잡도
- 정렬: O(N log N)
- 탐색 및 갱신: O(N)
- 총 시간 복잡도: O(N log N) (최대 50만 개 데이터 처리 가능)
구현 코드
function solution(targets) {
let answer = 0;
targets.sort((a, b) => a[1] - b[1]);
let curNum = -1;
for (const [a, b] of targets) {
if (a >= curNum) {
curNum = b;
++answer;
}
}
return answer;
}