※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 28070번 문제인 유니의 편지 쓰기이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/28070
28070번: 유니의 편지 쓰기
유니가 편지를 써야 할 시기를 YYYY-MM 형식으로 출력한다. 편지를 써야 할 시기가 여러 개일 경우, 가장 앞선 시기를 출력한다.
www.acmicpc.net
현재 군대에 있는 친구의 수를 나타내는 변수를 하나 준비하자. 이러한 변수를 이용하면 친구들의 입대시기 s1과 전역시기 s2를 시간순으로 정렬한 다음 시간순으로 살피며 입대와 전역이 일어날 때마다 해당 변수의 값을 바꾸는 것으로 매달 입대한 친구의 수를 알 수 있다. 이를 이용해 가장 많은 친구가 입대해있는 달을 찾아 문제를 해결하자.
같은 달에 입대하는 친구와 전역해서 더이상 군인이 아니게 된 친구가 있는 경우 전역하는 친구를 먼저 처리해 해당 달에 입대한 친구의 수 값이 부풀려지는 순간이 나오지 않게끔 변수를 관리할 수 있다.
입력으로 주어진 YYYY-MM꼴의 문자열은 문자열 자체 기본 대소비교를 통해서도 정렬이 가능하므로 특별한 문자열처리를 하지 않더라도 문제를 충분히 해결할 수 있다!
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int N;
vector<pair<string, int>> vec;
int val, mx; string ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
while (N--) {
string s1, s2; cin >> s1 >> s2;
vec.emplace_back(make_pair(s1, -1));
vec.emplace_back(make_pair(s2, 1));
}
sort(vec.begin(), vec.end());
for (auto& p : vec) {
val -= p.second;
if (mx < val) mx = val, ans = p.first;
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 28072 // C++] K512에서 피자 먹기 (0) | 2023.12.04 |
---|---|
[BOJ 28071 // C++] 승형이의 사탕 사기 (2) | 2023.12.03 |
[BOJ 28069 // C++] 김밥천국의 계단 (0) | 2023.12.01 |
[BOJ 28068 // C++] I Am Knowledge (0) | 2023.11.30 |
[BOJ 28067 // C++] 기하가 너무 좋아 (0) | 2023.11.29 |