KDHzoot's Github

Code for study, project, etc

자세히보기

알고리즘/PS

[백준 14469] 소가 길을 건너간 이유 3

kdhzoot 2020. 7. 29. 19:01

문제 링크 : https://www.acmicpc.net/problem/14469

 

14469번: 소가 길을 건너간 이유 3

문제 이웃 농장의 소가 길을 마구잡이로 건너는 것에 진절머리가 난 존은 극단의 결정을 내린다. 농장 둘레에 매우 큰 울타리를 짓는 것이다. 이렇게 하면 근처 농장 출신의 소가 들어올 일이 거

www.acmicpc.net

먼저 소들이 검문소에 오는 순서대로 정렬해준다.

 

algorithm 헤더에 있는 sort 함수를 사용했는데

 

sort 함수로 구조체를 정렬하는 방법은 아래 글에 설명되어 있다.

 

https://tunafish78.tistory.com/81?category=880339

 

[STL] algorithm sort 함수 사용법

정렬 PS를 하다보면 데이터를 정렬한 뒤 다뤄야 하는 상황이 생긴다. 보통 이런 경우에 시간복잡도가 빠른 퀵정렬(quick sort)를 사용하는데 당연히 매번 구현하기는 번거로움으로 algorithm헤더에 이

tunafish78.tistory.com


소들이 오는 순서대로 검문을 진행한다.

 

n번째 소가 검문을 하러 왔을 때

 

두가지 상황일 발생할 수 있다.

 

1. n-1번째 도착한 소가 검문을 받고 있는 경우

 

2. n-1 번째 도착한 소가 검문이 끝나서 들어갔을 경우

 

결국 n번째 소까지 검문하는 걸리는 시간은

 

상황에 따라

 

1. n-1번째 소가 끝나는 시간 + n번째 소가 검문하는데 걸리는 시간

 

2. n번째 소가 도착한 시간 + n번째 소가 검문하는데 걸리는 시간

 

이다.

 

n번째 소까지 검문하는데 걸리는 시간을 구했으므로

 

n+1, n+2, n+3 ... 

 

마지막 소까지 검문을 했을 때 끝나는 시간을 알 수 있다.

 


#include <iostream>
#include <algorithm>
#define n_ 105
using namespace std;

int n;
struct node {
	int x, y;

	bool operator<(node a) {
		return x < a.x;
	}
};
node arr[n_];
int main(void) {
	cin >> n;
	for (int i = 0; i < n; i++) {
		scanf("%d %d", &arr[i].x, &arr[i].y);
	}
	sort(arr, arr + n);

	int res = 0;
	for (int i = 0; i < n; i++) {
		if (arr[i].x > res) {
			res = arr[i].x + arr[i].y;
		}
		else {
			res += arr[i].y;
		}
	}
	cout << res << endl;
}

'알고리즘 > PS' 카테고리의 다른 글

[백준 17404] RGB거리 2  (0) 2020.07.29
[백준 2293] 동전 1  (0) 2020.07.29
[백준 10814] 나이순 정렬  (0) 2020.07.17
[백준 1111] IQ Test  (0) 2020.07.16
[백준 1149] RGB거리  (0) 2020.07.15