Algorithm/Programmers Java

[JAVA] 프로그래머스 level2 요격 시스템

제우제우 2024. 6. 26. 13:55

https://school.programmers.co.kr/learn/courses/30/lessons/181188

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코딩테스트 연습 > 연습문제 > 요격 시스템 

문제 접근 

폭격 미사일의  좌표 (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;
    }
}