본문 바로가기
프로그래밍/알고리즘 문제풀이

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

by 노잼인간이라불립니다 2023. 8. 9.

1. 문제 정의

 폭격 미사일이 하늘로 부터 수평 방향으로 s,e 구간사이에 떨어지고, 이 구간 사이에 미사일을 날려 최소한의 미사일로 폭격미사일을 막아내는 문제이다

ex) [1,2] , [3,4], [4,5], [5,10] 일 경우 총 4개의 미사일이 필요

ex) [1,5], [2,4], [5,10] 일 경우 총 2개의 미사일이 필요  

 

2. 내가 한 시도

 처음에는 감이 잡히질 않아서 서치를 해봤는데, 정렬을 하면 쉽게 풀리는 문제라는 힌트를 얻고, 그것을 통해 해결하였다. 개구간 s,e 아무거나 골라서 정렬을 하고, 순회하면서 범위내에서 해결하지 못하면 미사일을 추가하는 방식으로 푸는 방식이었다.

 나 같은 경우에는 개구간 s를 기준으로 내림차순 정렬하여 풀이를 진행하였다.

3. 코드

public class Solution {

    public int solution(int[][] targets) {
        /*
         * 나중에 리턴 할 정답
         */
        int answer = 1;

        /*
         * 개구간 s를 기준으로 내림차순 정렬
         */
        Arrays.sort(targets, (o1, o2) -> o2[0] - o1[0]);

        int start =targets[0][0];
        /*
         *  구간들을 순회해가면서 범위 커버가 안될 경우 answer++
         */
        for (int i = 1; i < targets.length; i++) {
            int[] target = targets[i];
            if (start - target[1] >= 0){
                answer++;
                start = target[0];
            }
        }
        return answer;
    }

}

4. 깨달은 점

 코테 초보라 아직 문제에 대한 접근 방식이 바로바로 떠오르지 않는게 문제다. 좀 더 많은 문제를 풀어야 할 필요가 있어 보인다. 이 부분은 단기간에 성장을 이루기는 어려워보인다. 학창시절 수학문제를 많이 풀어보면 점수가 저절로 올라가는 것과 같은 원리인듯 하다. 아직 시간 투자할 곳이 많긴 하지만, 코테 문제를 풀면서 java에 대한 이해도를 높이고, 다양한 API들을 사용해보려고 노력해야겠다.