전공공부/코딩테스트
(c++) 백준 "2304. 창고 다각형"
시아나
2022. 4. 29. 16:15
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;
}