https://school.programmers.co.kr/learn/courses/30/lessons/181188
코딩테스트 연습 > 연습문제 > 요격 시스템
문제 접근
폭격 미사일의 좌표 (s, e) 중에 e가 작은 순서대로 정렬
ex)
입력값 [[4, 5], [4, 8], [10, 14], [11, 13], [5, 12], [3, 7], [1, 4]]
정렬 이후
[1, 4]
[4, 5]
[3, 7]
[4, 8]
[5, 12]
[11, 13]
[10, 14]
Arrays.sort(targets, (o1, o2)-> o1[1] - o2[1]);
cur = 0 , answer = 0 초기화
cur은 요격 미사일
answer 요격 미사일 개수
현재 폭격 미사일의 s 좌표 보다 cur이 크면 continue
현재 폭격 미사일의 s 좌표 보다 cur이 작으면 answer ++;
cur 갱신 cur = 현재 폭격 미사일의 e 좌표
int cur = 0;
int answer = 0;
for(int i = 0; i < targets.length; i++){
if(cur > targets[i][0]) continue;
cur = targets[i][1];
answer++;
}
cur이 폭격 미사일 보다 크면 현재 요격 미사일은 폭격 미사일의 요격 범위 안에 무조건 들어간다.
왜냐하면 cur이 갱신되는 값은 전에 나온 폭격 미사일의 e 좌표이기 때문이다.
나는 처음에 폭격 미사일의 e 좌표가 작은 순서대로 정렬했기 때문에
폭격 미사일의 순서는 항상 e가 작은 순서대로이다.
그래서 cur의 값이 현재 폭격 미사일의 s 좌표 보다 크면 요격 범위 안에 들어가니 continue
아니라면 cur 값을 현재 폭격 미사일의 e 좌표로 갱신해준다.
answer = a
cur = c
파란색 cur 갱신 순간
전체 코드
import java.util.*;
class Solution {
public int solution(int[][] targets) {
Arrays.sort(targets, (o1, o2)-> o1[1] - o2[1]);
int cur = 0;
int answer = 0;
for(int i = 0; i < targets.length; i++){
if(cur > targets[i][0]) continue;
cur = targets[i][1];
answer++;
}
return answer;
}
}
'Algorithm > Programmers Java' 카테고리의 다른 글
[JAVA] 프로그래머스 level2 리코쳇 로봇 (0) | 2024.06.27 |
---|---|
[JAVA] 프로그래머스 level2 과제 진행하기 (0) | 2024.06.27 |
[JAVA] 프로그래머스 level2 연속된 부분 수열의 합 (0) | 2024.06.26 |
[JAVA] 프로그래머스 level2 광물 캐기 (0) | 2024.06.24 |
[JAVA] 프로그래머스 level3 n+1 카드게임 (0) | 2024.06.23 |