https://acmicpc.net/problem/1931
해설
이 문제는 그리디 알고리즘을 생각해봐야 한다.
문제 푼 방법
i) 끝나는 시간을 기준으로 정렬한다.
ii) 0번째 배열의 끝나는 시간을 finish에 저장한다.
iii) 1번 배열부터 for문을 돌려 finish 가 i의 시작하는 시간보다 작거나 같으면 cnt를 1 증가 시켜주고, finish에 i의 끝나는 시간을 저장해준다.
마지막에 cnt 를 출력해주면 된다.
˙˙˙
소스코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
vector<pair<int, int> >vp;
int n; cin >> n;
for(int i=0; i<n; i++){
int a,b; cin >> a >> b;
vp.push_back({b,a});
}
sort(vp.begin(), vp.end());
int cnt=1;
int finish = vp[0].first;
for(int i=1; i<n; i++){
if(vp[i].second >= finish){
cnt++;
finish = vp[i].first;
}
}
cout << cnt << '\n';
}
'백준 문제 풀이' 카테고리의 다른 글
[백준 1946] 신입 사원 (0) | 2020.03.24 |
---|---|
[백준 11399] ATM (0) | 2020.03.24 |
[백준 11047] 동전 0 (0) | 2020.03.23 |
[백준 5585] 거스름돈 (0) | 2020.03.23 |
[백준 2644] 촌수 계산 (0) | 2020.03.23 |
댓글