FrontEnd/프로그래머스

[JS] 요격 시스템

728x90

우선 나오는 미사일의 좌표들을 오름차순으로 정렬해준다.

 

이후, 2가지 케이스를 생각해주면 된다.

 

 

1. 한 선분을 잡고, 그 다음선분의 시작점이 내가 잡고있는 선분의 끝점보다 크지 않으면, 무조건 한줄로 끝낼 수 있다.

 

위 설명은 잘생각하면 당연한 말이다. 선분들이 서로 모두 겹쳐있다는 가정하에 한줄로 이어지는지 확인하는 방법은 위와 같다. 

 

2. [[1, 10], [3, 4], [5, 6]] 와 같이, 한 선분이 길고, 나머지 선분들이 겹치지 않는 경우가 생길 수 있다. 이런경우에는 선분을 두번 그려줘야 하는데, 내가 잡았던 선분을 기준으로 다음 오는 선분이 만약 포함되어 있다면, 해당 선분으로 생각하고 있던 선분을 잡아주면 된다.

 

 

[[1, 10], [3, 4], [5, 6]] <== 이 예시를 들어서 설명을 해보자.

 

처음 내가 생각하는 선분을 [1,10]으로 잡았다.

이후, [3,4]의 선분이 들어왔는데 해당 선분은 [1,10] 안에 포함되어 있길래 생각하는 선분을 [3,4]로 바꾸어준다.

[3,4]의 끝점보다 [5,6]의 시작점이 더 크므로 레이저를 하나 발사해줬다고 생각한 후, 생각하는 선분을 [5,6]으로 바꾸어준다.

 

 

 

function solution(targets) {
    targets.sort((a,b) => a[0]-b[0])
    let ret = 0
    let [s,e] = [0,0]
    
    for (const tg of targets) {
        if (e<=tg[0]) {
            [s,e] = tg
            ret++
        } else if (s<=tg[0] && tg[1] <=e){
            [s,e] = tg
        }
    }
    
    return ret
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 연속된 부분 수열의 합  (1) 2023.05.16
[JS] 두 원 사이의 정수쌍  (1) 2023.05.16
[JS] 왼쪽 오른쪽  (0) 2023.05.07
[JS] 배열만들기2  (0) 2023.05.04
[JS] 조건 문자열  (0) 2023.05.04