오랜만에 풀어보는 알고리즘 문제였다.
왠지 문제가 그리디하게 접근하면 풀릴것 같아서 시도했더니 한시간만에 풀 수 있었다.
로직
첫번째로 targets 배열을 정렬해야 한다.
어떤 기준으로 정렬하냐가 중요한데, 나는 s를 오름차순으로 정렬했다가 최솟값에 맞지 않는다는 것을 깨닫고
e을 오름차순으로 정렬했다.
for문을 돌며 미사일이 날아오면 미사일의 시작지점인 s와 e중 한 지점에서 요격해야 한다.
미사일 하나에 맞춰서 요격을 하고 다음 미사일이 현재 요격 기준에 맞지 않으면
answer를 추가하고 요격 기준을 갱신하는 방식으로 생각하면 된다.
최종 코드
import java.util.*;
class Solution {
public int solution(int[][] targets) {
int answer = 0;
int end = 0;
Arrays.sort(targets, Comparator.comparingInt(o -> o[1]));
for(int i = 0; i < targets.length; i++) {
int s = targets[i][0];
int e = targets[i][1];
if(s >= end) {
end = e;
answer++;
}
}
return answer;
}
}
'코딩 테스트' 카테고리의 다른 글
(Python) 프로그래머스 - 석유 시추 (1) | 2024.03.08 |
---|---|
(Python) 프로그래머스 - 도넛과 막대 그래프 (1) | 2024.03.06 |
(Java) 프로그래머스 - 리코쳇 로봇 (0) | 2023.08.01 |
(Java) 프로그래머스 - 디펜스 게임 (0) | 2023.07.29 |
(Java) 프로그래머스 - 광물 캐기 (0) | 2023.07.25 |