본문 바로가기
알고리즘/프로그래머스

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

by KDW999 2023. 5. 27.

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

 

프로그래머스

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

programmers.co.kr

 

 

문제 접근

앙증맞은 그림에 비해 생각보다 어려웠고 이해가 안되는 부분도 있었다.

람다식을 이용한 마지막 미사일 구간 오름차순 정렬이라던데 처음 봤다.

 

마지막 미사일 구간만 알면 미사일들 끼리 겹치는지 아닌지 알 수 있고 겹치는지만 알면 요격 지점을 어디로 두든 상관없다.

요격 지점은 실수 위치도 가능하기 때문

 

미사일 구간이 계속 겹치면 요격 지점을 추가하지 않고 겹치지 않으면 새로운 요격 지점을 추가하는 형태

 

import java.util.*;

class Solution {
    public int solution(int[][] targets) {
        int answer = 0;
        
        Arrays.sort(targets, (o1, o2) -> {
        	return o1[1]- o2[1];
        });
        
        int last = -1;
        
        for(int[] target : targets) {
        	if(last == -1) { // 처음 한 번은 무조건 실행
        		answer++;
        		last = target[1] -1; // 마지막 구간은 걸쳐있어도 요격 불가
        	}
        	
        	if(last >= target[0] && last <= target[1]) continue; // 현재 저장된 마지막 요격 지점이 현재 구간에 포함되어 있다면 겹쳐서 요격 가능하기에 다음 미사일 좌표 탐색
        	
        	// 구간에 포함 안되면 새로운 요격 미사일 추가, 마지막 요격 지점 변경
        	answer++;
        	last = target[1] -1;
        }
        
        return answer;
    }
}

댓글