티스토리 뷰

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

해설

석순(bottom)의 경우 입력받은 값 그대로 저장하면 되지만, 종유석(top)의 경우 전체 높이에서 입력받은 크기를 빼고 저장한다.

각 bottom, top 인덱스의 의미는 장애물의 크기를 의미한다.

 

각 누적합 인덱스에는 구간에 따른 장애물을 부실 수 있는 개수를 저장한다.

  • bottom : 만약 구간이 1이라면 bottom의 1, 3, 5번째 장애물을 모두 부실 수 있다. 
  • top : 만약 구간이 4라면 top의 2번째 장애물만 부실 수 있다.

코드

import java.io.*;
import java.util.*;

public class Main {

    static int N, H;
    static int[] top;
    static int[] bottom;
    static int res, cnt;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        H = Integer.parseInt(st.nextToken());

        top = new int[H + 1];
        bottom = new int[H + 1];

        for (int i = 0; i < N / 2; i++) {
            int b = Integer.parseInt(br.readLine());
            int t = H - Integer.parseInt(br.readLine());
            bottom[b]++;
            top[t]++;
        }

        for (int i = 1; i <= H; i++) {
            bottom[i] += bottom[i - 1];
        }
        for (int i = 1; i <= H; i++) {
            top[i] += top[i - 1];
        }

        res = Integer.MAX_VALUE;
        solution();
    }

    static void solution() {
        for (int i = 1; i <= H; i++) {
            int result = bottom[H] - bottom[i - 1] + top[i - 1];

            if (result < res) {
                res = result;
                cnt = 1;
            } else if (result == res) {
                cnt++;
            }
        }

        System.out.println(res + " " + cnt);
    }
}
Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30