[문제 보기]
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
[풀이과정]
입력값으로 주는 데이터를 vector로 받아 sort를 시켜준다. 이때 cmp() 함수를 따로 만들어 규칙을 정해주었다.
cmp()
-> 입력값으로 받은 y값을 기준으로 오름차순으로 정렬시켜주는데, 이때 y값이 같을 경우 x값을 기준으로
오름차순시켜준다.
그러고 나서 정렬된 vector를 가지고 풀이를 진행하는데, 제일 큰 값을 가지고 처음 start_day를 계산해주고,
pop_back()을 해준다. 그리고 나서 while()을 사용하여 vector가 empty()될 때까지 수행을 한다.
이때, 맨 마지막으로 있는 vector값 순으로 계산을 해주는데, 하루에 과제를 하나만 할 수 있다고 나와있으므로,
겹치는 날이 나올 수 있기 때문에 ed값이 현재 start_day보다 클 경우 sd - (ed - start_day)을 해주어 날짜를 댕겨주고,
아닐 경우 start_day = sd로 바꿔주는 연산을 해준다.
[소스보기]
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct homework{
int x;
int y;
};
vector<homework> work;
bool cmp(homework a, homework b){
if(a.y == b.y)
return a.x < b.x;
else
return a.y < b.y;
}
int main(){
cin.tie(0);
cout.sync_with_stdio(false);
int T;
cin >> T;
for(int test = 1; test <= T; test++){
int n;
cin >> n;
for(int i=0; i<n; i++){
int x, y;
cin >> x >> y;
work.push_back({x,y});
}
sort(work.begin(), work.end(), cmp);
int start_day = work.back().y - work.back().x;
work.pop_back();
while(!work.empty()){
int ed = work.back().y;
int sd = work.back().y - work.back().x;
work.pop_back();
if(ed >= start_day)
start_day = sd - (ed - start_day);
else
start_day = sd;
}
cout << "#" << test << " " << start_day << "\n";
}
return 0;
}
[해결과정 중 실수한 부분]
'알고리즘 스터디 > SW_Expert_Academy' 카테고리의 다른 글
| [SWEA 8934][C++] 팰린드롬 공포증(D4) (0) | 2020.08.09 |
|---|---|
| [SWEA 9088][C++] 다이아몬드 (D4) (0) | 2020.08.08 |
| [SWEA 7088][C++] 은기의 송아지 세기(D4) (0) | 2020.08.01 |
| [SWEA 7465][C++] 창용 마을 무리의 개수(D4) (0) | 2020.07.24 |
| [SWEA 8275][C++] 햄스터(D4) (0) | 2020.07.24 |