개발/Algorithm
[프로그래머스] 요격 시스템 (Java 풀이)
Dane.Kim
2023. 4. 16. 12:14
아이디어
- 범위가 배열로 주어지는데, 겹치는 부분을 확인하기 위해 범위의 종료 지점을 작은 순으로 정렬
- 첫 인덱스 부터 시작하여 종료 지점에서 -1 한 값이 다음 인덱스의 범위에 들어가는지 확인, 안 들어가면 해당 요격은 종료되고 새로운 요격 시스템이 추가되는 형식
풀이
import java.util.*;
class Solution {
public int solution(int[][] targets) {
//기본 요격 횟수 1회
int answer = 1;
// 인덱스 1의 값이 작은 순으로 정렬하는 람다식
Arrays.sort(targets, (o1, o2) -> { return o1[1]-o2[1]; });
//요격 위치
int aim = 0;
for(int[] target : targets){
if(aim == 0){
//요격 위치 설정
aim = target[1] - 1;
continue;
}
//요격 위치가 다음 범위에 겹치면 요격 횟수 증가 없이 continue
if (aim>=target[0] && aim <= target[1]){
continue;
}
//겹치지 않으면 요격 횟수 증가 및 새로운 요격 위치 설정
answer++;
aim = target[1] -1 ;
}
return answer;
}
}
어떻게 겹치는 범위를 찾아낼지 고민했는데, 이 방법이 가장 단순해보였다.