개발/Algorithm

[프로그래머스] 요격 시스템 (Java 풀이)

Dane.Kim 2023. 4. 16.

아이디어

- 범위가 배열로 주어지는데, 겹치는 부분을 확인하기 위해 범위의 종료 지점을 작은 순으로 정렬

- 첫 인덱스 부터 시작하여 종료 지점에서 -1 한 값이 다음 인덱스의 범위에 들어가는지 확인, 안 들어가면 해당 요격은 종료되고 새로운 요격 시스템이 추가되는 형식

 

 

풀이

 

import java.util.*;

class Solution {
    public int solution(int[][] targets) {
        //기본 요격 횟수 1회
        int answer = 1;
        
        // 인덱스 1의 값이 작은 순으로 정렬하는 람다식
        Arrays.sort(targets, (o1, o2) -> { return o1[1]-o2[1]; });
        
        //요격 위치
        int aim = 0;
        for(int[] target : targets){
        
            if(aim == 0){
                //요격 위치 설정
                aim = target[1] - 1;
                continue;
            }
            //요격 위치가 다음 범위에 겹치면 요격 횟수 증가 없이 continue    
            if (aim>=target[0] && aim <= target[1]){
                continue;
            }
            //겹치지 않으면 요격 횟수 증가 및 새로운 요격 위치 설정
            answer++;
            aim = target[1] -1 ;
        }
        
        return answer;
    }
}

어떻게 겹치는 범위를 찾아낼지 고민했는데, 이 방법이 가장 단순해보였다.

댓글