https://www.acmicpc.net/problem/2304
풀이
각 높이별로 가장 왼쪽에 있는 기둥과 가장 오른쪽에 있는 기둥을 구해서 그 사이 면적을 계속 더해주는 식으로 코드를 작성하였다
제출 코드
#include <iostream>
#include <algorithm>
using namespace std;
pair<int, int> arr[1001];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i].first >> arr[i].second;
sort(arr, arr + n);
int sum = 0;
for (int i = 1; i <= 1000; i++)
{
int left = 0, right = 0;
for (int j = 0; j < n; j++)
{
if (arr[j].second >= i)
{
if (!left) left = arr[j].first;
right = max(right, arr[j].first + 1);
}
}
sum += (right - left);
}
cout << sum;
}
다른 풀이
가장 높은 기둥을 구하고, 왼쪽과 오른쪽에서 각각 이동하며 가장 높은 높이를 갱신해서 각 L마다 더해주는 방식으로 더 간단하게도 구현이 가능하다
'Programing > 백준, 프로그래머스(C++)' 카테고리의 다른 글
[C++][백준 21920] 서로소 평균 (0) | 2025.01.27 |
---|---|
[C++][백준 5347] LCM (0) | 2025.01.27 |
[C++][백준 2075] N번째 큰 수 (0) | 2025.01.22 |
[C++][백준 1927] 최소 힙 (0) | 2025.01.21 |
[C++][백준 9375] 패션왕 신해빈 (0) | 2025.01.21 |