티스토리 뷰
사용 언어: Kotlin
문제
https://school.programmers.co.kr/learn/courses/30/lessons/181188
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
요격을 하면 수직선상의 모든 미사일을 한번에 요격할 수 있다.
정수 쌍(s, e)으로 이루어진 길이의 미사일들을 모두 요격하려고 할 때, 최소한으로 필요한 요격 횟수를 return한다.
제한사항
target(s,e) = s부터 e까지의 길이를 가진 미사일
0 <= s < e <= 100,000,000
targets = target(s,e)의 배열
1 <= targets의 길이 <= 500,000
풀이
답이 될 수 있는 최대값은 targets의 길이와 같다.
최소값을 구하기 위해서, 가장 중요한 포인트는 두 미사일의 범위가 겹치는 곳을 요격하면, 한번에 처리할 수 있는 것이다.
targets를 e를 기준으로 오름차순 정렬한 후에
가장 e가 작은 미사일의 e좌표로 요격을 하며,
s좌표를 기준으로 검사하여 겹치는 미사일을 제거해주면 된다. 이때, 겹치지 않는 미사일이 나오면, 이후는 순회할 필요가 없다. (이후에 겹치는 미사일이 있더라도)
(1,3), (2,5), (4,6), (1,7)
위와 같이 미사일이 있다고 하면, 3좌표로 요격을 했을 때 (1,3), (2,5)만 제거해주더라도 (4,6) 미사일에 의해 좌표 6을 요격했을 때, (1,7) 미사일도 제거된다.
코드
fun solution(targets: Array<IntArray>): Int {
val queue = ArrayDeque<IntArray>(0)
targets.sortedBy { it[1] }.forEach { queue.add(it) }
var result = 0
while(queue.isNotEmpty()) {
val targetIndex = queue.removeFirst()
while(queue.isNotEmpty() && targetIndex[1] > queue.first()[0]) {
queue.removeFirst()
}
result++
}
return result
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 지형 이동 (0) | 2024.01.24 |
---|---|
[프로그래머스] 카운트 다운 (1) | 2024.01.24 |
[프로그래머스] 여행경로 (0) | 2024.01.23 |
[프로그래머스] N으로 표현 (1) | 2024.01.23 |
[프로그래머스] 연속 펄스 부분 수열의 합 (1) | 2024.01.11 |
- Total
- Today
- Yesterday
- 통합점
- 가상 회선
- 와일드카드 마스크
- 사설 IP 주소
- 데이터링크 계층
- 리키 버킷
- 네임 서버
- Service Primitive
- 표현 계층
- HTTP
- 오류 제어
- 포트 주소
- 전송 계층
- OSI 7계층
- 서비스 프리미티브
- 세션 연결
- 데이터링크
- IP
- 동기점
- 혼잡
- 교환 시스템
- 거리 벡터 라우팅
- 링크 상태 라우팅
- ECN 패킷
- 네트워크
- TTL
- Internetworking
- 세션 계층
- 네트워크 계층
- 라우팅
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |