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

최민길(Gale)·2023년 7월 4일
1

알고리즘

목록 보기
83/172

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181188

이 문제는 문제의 조건을 구현하면 풀 수 있습니다. 문제의 조건이 바로 떠오르지 않아 어렵게 느껴질 수 있는데 미사일의 위치를 기준으로 요격 미사일 위치를 정할 수 있습니다.

미사일이 하나도 설치가 되어 있지 않을 경우 미사일을 요격하기 위해 미사일을 추가하고 가장 마지막 미사일의 정보를 기억합니다. 다음 미사일 정보를 가져올 때 이전 미사일의 구간 내에 존재한다면 요격 미사일을 하나 더 설치할 필요가 없기 때문에 continue로 넘어가고 다른 구간일 경우 요격 미사일을 추가합니다.

여기서 중요한 점은 크게 2가지입니다. 첫 번째로 미사일을 정렬하지 않으면 미사일을 탐색하는 과정에서 이전에 탐색한 미사일 정보를 기억하고 있지 않아 중복 체크될 우려가 있습니다. 두 번째는 개구산의 시작과 끝점에서는 요격이 불가능하다는 것입니다. 따라서 미사일 정보를 기억할 때 끝 값을 기준으로 기억하고 끝값만을 continue 문 내부에서 포함시켜야 시작과 끝에서 요격이 되지 않습니다.

다음은 코드입니다.

import java.util.*;

class Solution {
    public int solution(int[][] targets) {
        int turrets = 0;
        
        Arrays.sort(targets, (o1,o2) -> {return o1[1]-o2[1];});
        int missile = -1;
        for(int[] target : targets){
            if(missile == -1){
                turrets++;
                missile = target[1];
            }
            
            if(target[0] < missile && target[1] >= missile) continue;
            
            turrets++;
            missile = target[1];
        }
        
        return turrets;
    }
}

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글