소가 길을 건너간 이유 3
다국어
2 초 | 512 MB | 3299 | 2074 | 1787 | 65.267% |
문제
이웃 농장의 소가 길을 마구잡이로 건너는 것에 진절머리가 난 존은 극단의 결정을 내린다. 농장 둘레에 매우 큰 울타리를 짓는 것이다. 이렇게 하면 근처 농장 출신의 소가 들어올 일이 거의 없다. 이 일로 주변 소들이 분개하였다. 친구네 집에 놀러 갈 수 없을 뿐만 아니라, 매년 참가하던 국제 젖 짜기 올림피아드에도 올해는 참가할 수 없게 되었기 때문이다.
이웃 농장의 소 중 존의 농장에 방문할 수 있는 소가 조금 있긴 하지만, 그들도 안심할 수 있는 건 아니다. 존의 농장에 들어가는 문은 하나밖에 없고, 그 문을 통과하려면 감시관의 길고 긴 검문을 받아야 한다. 여러 마리의 소가 한 번에 들어가려고 하면 줄이 그 만큼 길어진다.
N마리의 소가 이 농장에 방문하러 왔다. 소가 도착한 시간과 검문받는 데 걸리는 시간은 소마다 다르다. (물론 같을 수도 있다.) 두 소가 동시에 검문을 받을 수는 없다. 예를 들어, 한 소가 5초에 도착했고 7초 동안 검문을 받으면, 8초에 도착한 그 다음 소는 12초까지 줄을 서야 검문을 받을 수 있다.
모든 소가 농장에 입장하려면 얼마나 걸리는 지 구해보자.
입력
첫 줄에 100 이하의 양의 정수 N이 주어진다. 다음 N줄에는 한 줄에 하나씩 소의 도착 시각과 검문 시간이 주어진다. 각각 1,000,000 이하의 양의 정수이다.
출력
모든 소가 농장에 입장하는 데 걸리는 최소 시간을 출력한다.
예제 입력 1 복사
3
2 1
8 3
5 7
예제 출력 1 복사
15
힌트
첫 번째 소는 2초에 도착하고 3초에 농장을 입장한다. 그 다음에는 세 번째 소가 5초에 도착하여 12초에 농장을 입장한다. 마지막으로 두 번째 소가 8초에 오는데, 세 번째 소가 검문을 받고 있으므로 12초까지 기다린 뒤 15초에 농장을 입장한다.
https://www.acmicpc.net/problem/14469
흐름
코드
#include <bits/stdc++.h>
using namespace std;
int n,ret,l,r;
int main(){
ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
//1. 입력하기
cin >> n;
pair<int,int> cow[n];
for(int i=0;i<n;i++){
cin >> cow[i].first >> cow[i].second; //도착시간, 검문시간
cow[i].second += cow[i].first;
}
//2. 도착시간 기준으로 정렬하기-오름차순
sort(cow, cow+n);
//3. 소요시간 더하거나 종료시간 늘리기
l = cow[0].first; r=cow[0].second;
for(int i=1;i<n;i++){
if(r<cow[i].first){
l=cow[i].first;
r=cow[i].second;
}
else if (r>=cow[i].first){
r = r+(cow[i].second-cow[i].first);//종료시간 늘리기
}
}
//3. 정답 출력하기
cout << r;
}
이전 문제와 헷갈리지않도록 하자.
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
6주차: 이분탐색과 LIS (0) | 2023.03.08 |
---|---|
1931번: 회의실 배정 (0) | 2023.03.07 |
1781번: 컵라면 (0) | 2023.03.07 |
9935번: 문자열 폭발 (0) | 2023.03.06 |
11729번: 하노이탑 이동순서, 23250번: 하노이 탑 K (4) | 2023.03.06 |