알고리듬/문제

[baekjoon] 3020

narmeee 2023. 4. 27. 00:43

개똥벌레 

문제

개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 번갈아가면서 등장한다.

아래 그림은 길이가 14미터이고 높이가 5미터인 동굴이다. (예제 그림)

 

이 개똥벌레는 장애물을 피하지 않는다. 자신이 지나갈 구간을 정한 다음 일직선으로 지나가면서 만나는 모든 장애물을 파괴한다.

위의 그림에서 4번째 구간으로 개똥벌레가 날아간다면 파괴해야하는 장애물의 수는 총 여덟개이다. (4번째 구간은 길이가 3인 석순과 길이가 4인 석순의 중간지점을 말한다)

 

하지만, 첫 번째 구간이나 다섯 번째 구간으로 날아간다면 개똥벌레는 장애물 일곱개만 파괴하면 된다.

동굴의 크기와 높이, 모든 장애물의 크기가 주어진다. 이때, 개똥벌레가 파괴해야하는 장애물의 최솟값과 그러한 구간이 총 몇 개 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 H가 주어진다. N은 항상 짝수이다. (2 ≤ N ≤ 200,000, 2 ≤ H ≤ 500,000)

다음 N개 줄에는 장애물의 크기가 순서대로 주어진다. 장애물의 크기는 H보다 작은 양수이다.

출력

첫째 줄에 개똥벌레가 파괴해야 하는 장애물의 최솟값과 그러한 구간의 수를 공백으로 구분하여 출력한다.

예제 입력

6 7
1
5
3
3
5
1

예제 출력

2 3

 

풀이

아래서부터 자라는 석순(초록색) 위에서부터 자라는 종유석(파란색)이 있다.

높이 1일때 파괴해야하는 석순 : 2+1+4 = 7
높이 2일때 파괴해야하는 석순 : 1+4 = 5
높이 3일때 파괴해야하는 석순 : 4
높이 4일때 파괴해야하는 석순 : 4
높이 5일때 파괴해야하는 석순 : 0
높이 1일때 파괴해야하는 종유석 : 0
높이 2일때 파괴해야하는 종유석 : 0
높이 3일때 파괴해야하는 종유석 : 5
높이 4일때 파괴해야하는 종유석 : 7
높이 5일때 파괴해야하는 종유석 : 10

석순과 종유석의 높이별 누적합을 구하고 합쳐준다.

 

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int width, heigth, temp;
    int *up, *down;
    unsigned int *sum;

    cin >> width >> heigth;

    up = new int[heigth]{0,};
    down = new int[heigth]{0,};
    sum = new unsigned int[heigth]{0, };
    for(int i = 0; i < width; i++){
        cin >> temp;
        if(i % 2 == 0){
            up[temp-1]++;
        }else{
            down[temp-1]++;
        }

    }
    for(int i = 1; i < heigth; i++){
        up[heigth-i-1] += up[heigth-i];
        down[heigth-i-1] += down[heigth-i];
    }
    for(int i = 0; i < heigth; i++)sum[i] = up[i] + down[heigth-1-i];


    sort(sum, sum+heigth);
    int count = 1;
    for(int i = 0; sum[i] == sum[i+1]; i++)count++;
    cout << sum[0] << " " << count;
}

'알고리듬 > 문제' 카테고리의 다른 글

[baekjoon] 16118  (0) 2023.04.28
[baekjoon] 2212  (0) 2023.04.27
[baekjoon] 1937  (0) 2023.04.27
[baekjoon] 2470  (0) 2023.04.26
[baekjoon] 23354  (0) 2023.04.24