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 |