https://school.programmers.co.kr/learn/courses/30/lessons/181188
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
제한사항
1 ≤ targets의 길이 ≤ 500,000
targets의 각 행은 [s,e] 형태입니다.이는 한 폭격 미사일의 x 좌표 범위를 나타내며, 개구간 (s, e)에서 요격해야 합니다.
0 ≤ s < e ≤ 100,000,000
제한사항을 보았을 때 수가 상당히 큰 것을 볼 수 있음. 그래서 여러 알고리즘을 제거할 수 있었음
다만, 어떤 알고리즘도 활용 방법에 대해 떠오르지 않았음. 여러 아이디어들이 떠올랐지만 그 방식이 최적이 되는지가 판단이 되지 않았음
범위를 오름차순으로 정렬하여 문제를 풀이할 수 있을 것이라 생각했고 처음에는 start 기준으로 오름차순 정렬하여 문제를 해결하려 했음
start 기준으로 했을 때 범위 내에 들어오는지 확인하기 위해 추가적인 로직이 필요함
따라서 end 기준으로 오름차순 정렬하여 다음 start가 범위 내에 있는지 확인하고 범위 밖이라면 end 기준을 업데이트하도록 구현
문제의 원리를 빨리 파악하고 이해하여 적절한 풀이 방식을 떠올리는 게 필요함
function solution(targets) {
var answer = 0;
const sorted = targets.slice().sort((a,b) => a[1] - b[1])
let rangeEnd = sorted[0][1];
answer++;
for(let i = 0; i < sorted.length; i++){
const [start, end] = sorted[i];
if(start < rangeEnd){
continue;
} else {
rangeEnd = end;
answer++;
}
}
return answer;
}
'DEV > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 연속된 부분 수열의 합 (0) | 2025.04.20 |
---|---|
[프로그래머스] 완전범죄 (0) | 2025.04.17 |
[프로그래머스] 충돌위험 찾기 (0) | 2025.04.15 |
[프로그래머스] 매출 하락 최소화 (0) | 2025.04.14 |
[프로그래머스] 비밀 코드 해독 (0) | 2025.04.10 |