본문 바로가기
전공공부/코딩테스트

(c++) 백준 "2304. 창고 다각형"

by 시아나 2022. 4. 29.

https://www.acmicpc.net/problem/2304

 

2304번: 창고 다각형

첫 줄에는 기둥의 개수를 나타내는 정수 N이 주어진다. N은 1 이상 1,000 이하이다. 그 다음 N 개의 줄에는 각 줄에 각 기둥의 왼쪽 면의 위치를 나타내는 정수 L과 높이를 나타내는 정수 H가 한 개의

www.acmicpc.net


#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
vector<pair<int, int>> list;
int big = 0,N;

bool compare(pair<int, int> n1, pair<int, int> n2) {
	return n1.first < n2.first;
}

void solution() {
	int answer = 0;
	sort(list.begin(), list.end(), compare);
	for (int i = 0; i < N; i++) {
		big = (list[big].second <= list[i].second) ? i : big;
	}
	pair<int, int> tmp = list[0];
	for(int i = 1;i<=big;i++){
		if (list[i].second >= tmp.second) {
			answer += (list[i].first - tmp.first) * tmp.second;
			tmp = list[i];
		}
	}
	answer += list[big].second;
	tmp = list[N-1];
	for (int i = N-2; i >= big; i--) {
		if (list[i].second >= tmp.second) {
			answer += (tmp.first - list[i].first) * tmp.second;
			tmp = list[i];
		}
	}
	cout << answer << endl;
}

int main() {
	cin >> N;
	for (int i = 0; i < N; i++) {
		int n,m; cin >> n>>m;
		list.push_back({ n,m });
	}
	solution();
	return 0;
}