Programing/백준, 프로그래머스(C++)

[C++][백준 2304] 창고 다각형

hye3193 2025. 1. 23. 10:33

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마다 더해주는 방식으로 더 간단하게도 구현이 가능하다