아이디어
- 범위가 배열로 주어지는데, 겹치는 부분을 확인하기 위해 범위의 종료 지점을 작은 순으로 정렬
- 첫 인덱스 부터 시작하여 종료 지점에서 -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;
}
}
어떻게 겹치는 범위를 찾아낼지 고민했는데, 이 방법이 가장 단순해보였다.
'개발 > Algorithm' 카테고리의 다른 글
[프로그래머스] 최소 직사각형 (Java 풀이) (0) | 2023.08.06 |
---|---|
[PS] 코딩테스트에 나오는 완전탐색 (0) | 2023.07.31 |
[Python] 백준 9093번 단어 뒤집기 (0) | 2021.11.15 |
[Python] 백준 14720번 우유 축제 (0) | 2021.11.15 |
[Python] 백준 15650번 N과 M (2) (0) | 2021.11.15 |
댓글