728x90
url : https://school.programmers.co.kr/learn/courses/30/lessons/181188
문제가 그리디인 이유
요격하는데 필요한 최소한의 미사일 갯수
=> 매 순간 최소의 미사일 개수를 선택하고, 그것을 계속하면 전체적인 최소 미사일 개수가 나온다 (=최적 부분 구조)
✅ 구간이 나오고, 정렬 가능하다면 그리디를 생각하기!
그리디 중 구간 스케줄링
1. sort(끝점 기준 정렬)
2. 기준값이 시작값보다 작으면 cnt++
코드
#include <bits/stdc++.h>
using namespace std;
// 끝점 기준으로 오름차순 정렬
bool cmp(vector<int> v1, vector<int> v2){
return v1[1] < v2[1];
}
int solution(vector<vector<int>> targets) {
int answer = 0;
//1. 끝점 기준으로 정렬하기
sort(targets.begin(), targets.end(), cmp);
//2. 시작점이 요격 위치보다 큰 경우에 미사일 발사
double lastIntercept=-1;
for(vector<int> target:targets){
if(lastIntercept<target[0]){
lastIntercept = target[1]-0.1;
answer++;
}
}
//3. 정답 출력
return answer;
}
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
[백준] 14888 : 연산자 끼워넣기 (1) | 2023.12.25 |
---|---|
[백준] 2206: 벽 부수고 이동하기 (2) | 2023.12.24 |
[백준] 1766: 문제집 (1) | 2023.12.21 |
[백준] 2252 : 줄 세우기, 위상 정렬 (2) | 2023.12.20 |
[백준] 2468 : 안전 영역 (0) | 2023.12.19 |