문제 링크입니다: https://www.acmicpc.net/problem/2457
2457번: 공주님의 정원
첫째 줄에는 꽃들의 총 개수 N (1<=N<=100,000)이 주어진다. 다음 N개의 줄에는 각 꽃이 피는 날짜와 지는 날짜가 주어진다. 하나의 날짜는 월과 일을 나타내는 두 숫자로 표현된다. 예를 들어서, 3 8 7 31은 꽃이 3월 8일에 피어서 7월 31일에 진다는 것을 나타낸다.
www.acmicpc.net
회의실 문제와 비슷하지만 날짜가 존재하기 때문에 처리하기 까다로운 문제였습니다.
달에 해당하는 숫자에 100을 곱해준다면 MMdd 와 같은 형식이 되기 때문에 처리하기 수월해집니다!(M = month, d = day)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <vector> | |
#include <algorithm> | |
using namespace std; | |
int main(void) | |
{ | |
ios_base::sync_with_stdio(0); | |
cin.tie(0); | |
int N; | |
cin >> N; | |
vector<pair<int, int>> v; | |
for (int i = 0; i < N; i++) | |
{ | |
pair<int, int> a, b; | |
cin >> a.first >> a.second >> b.first >> b.second; | |
// MMdd | |
v.push_back({ a.first * 100 + a.second, b.first * 100 + b.second }); | |
} | |
sort(v.begin(), v.end()); | |
int idx = -1; | |
int temp = 0; | |
int result = 0; | |
// 3월 1일부터 11월 30일 | |
for (int i = 301; i <= 1130 && idx < N; i = temp) | |
{ | |
bool flag = false; | |
idx++; | |
for (int j = idx; j < v.size(); j++) | |
{ | |
if (v[j].first > i) | |
{ | |
break; | |
} | |
if (temp < v[j].second) | |
{ | |
temp = v[j].second; | |
idx = j; | |
flag = true; | |
} | |
} | |
if (flag) | |
{ | |
result++; | |
} | |
else | |
{ | |
cout << 0 << "\n"; | |
return 0; | |
} | |
} | |
cout << result << "\n"; | |
return 0; | |
} |


개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
백준 16120번 PPAP (0) | 2019.10.22 |
---|---|
백준 2012번 등수 매기기 (0) | 2019.10.22 |
백준 3036번 링 (0) | 2019.10.21 |
백준 15736번 청기 백기 (0) | 2019.10.21 |
백준 1145번 적어도 대부분의 배수 (0) | 2019.10.21 |