๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[BOJ 20207] ๋‹ฌ๋ ฅ

by ๐Ÿณ Laboon 2025. 3. 31.

๋ฌธ์ œ ์ •๋ฆฌ

  • ๋‚ ์งœ๊ฐ€ 1์ผ ~ 365์ผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ๋Š” ๋‹ฌ๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.
  • ์˜ฌํ•ด ์ผ์ •์„ ๋ชจ๋‘ ๊ณ„ํšํ•ด์„œ ๋‹ฌ๋ ฅ์— ํ‘œ์‹œํ•จ.
  • ๋‚ ์”จ๋กœ ์ธํ•ด ๋‹ฌ๋ ฅ์— ํ‘œ์‹œํ•œ ์ผ์ • ์ค‘ ์ผ๋ถ€๊ฐ€ ์ง€์›Œ์ง€๋ ค๊ณ  ํ•จ.
  • ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ผ์ •์ด ์žˆ๋Š” ๊ณณ์—๋งŒ ์ฝ”ํŒ…์ง€๋ฅผ ๋‹ฌ๋ ฅ์— ๋ถ™์ด๋ ค๊ณ  ํ•จ.
  • ๋„ˆ๋ฌด ๊ท€์ฐฎ์€ ํƒ“์— ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ผ ์ฝ”ํŒ…์ง€๋ฅผ ๋ถ™์ด๋ ค๊ณ  ํ•œ๋‹ค.
    • ์—ฐ์†๋œ ์ผ์ •์„ ๋ชจ๋‘ ๊ฐ์Œ€ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ง์‚ฌ๊ฐํ˜•์˜ ์ฝ”ํŒ…์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋ถ™์ธ๋‹ค.
      • ์—ฐ์†๋œ ๋‘ ์ผ์ž์— ๊ฐ ๊ฐ ์ผ์ •์ด 1๊ฐœ ์ด์ƒ์žˆ๋‹ค๋ฉด, ์—ฐ์†๋œ ์ผ์ •์ด๋‹ค.
      • ์—ฐ์†๋œ ๋ชจ๋“  ์ผ์ •์€ ํ•˜๋‚˜์˜ ์ง์‚ฌ๊ฐํ˜•์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ๋‹ฌ๋ ฅ์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.
    • ์ผ์ •์€ ์‹œ์ž‘ ๋‚ ์งœ์™€ ์ข…๋ฃŒ ๋‚ ์งœ๋ฅผ ํฌํ•จํ•œ๋‹ค.
    • ์‹œ์ž‘์ผ์ด ๊ฐ€์žฅ ์•ž์„  ์ผ์ •๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฑ„์›Œ์ง„๋‹ค.
    • ์‹œ์ž‘์ผ์ด ๊ฐ™์€ ๊ฒฝ์šฐ ์ผ์ •์˜ ๊ธฐ๊ฐ„์ด ๊ธด ๊ฒƒ๋ถ€ํ„ฐ ์ฑ„์›Œ์ง„๋‹ค.
    • ์ผ์ •์€ ๊ฐ€๋Šฅํ•œ ํ•œ ์ตœ ์ƒ๋‹จ์— ๋ฐฐ์น˜๋œ๋‹ค.
    • ์ผ์ • ํ•˜๋‚˜์˜ ์„ธ๋กœ์˜ ๊ธธ์ด๋Š” 1์ด๋‹ค.
    • ํ•˜๋ฃจ์˜ ํญ์€ 1์ด๋‹ค.

์ œํ•œ์‚ฌํ•ญ

  • ์ผ์ •์˜ ๊ฐœ์ˆ˜ 1 <= N <= 1,000
  • ์‹œ์ž‘ ๋‚ ์งœ 1 <= S <= 365
  • ์ข…๋ฃŒ ๋‚ ์งœ 1 <= E <= 365

๋ฌธ์ œ์˜ ํ•ต์‹ฌ

  • ํ•ต์‹ฌ 1. ์—ฐ์†๋œ ์ผ์ •์„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค.
  • ํ•ต์‹ฌ 2. ์—ฐ์†๋œ ์ผ์ • ์ค‘ ํ•˜๋ฃจ์— ๊ฐ€์žฅ ๋งŽ์€ ์ผ์ •์˜ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.
  • ํ•ต์‹ฌ 3. ์—ฐ์†๋œ ์ผ์ •์˜ ๊ธธ์ด * ์ผ์ • ์ค‘ ๊ฐ€์žฅ ๋งŽ์€ ์ผ์ •์˜ ์ˆ˜๋กœ ๋๋‚˜๋Š” ์ผ์ • ๋ณ„๋กœ ์ฝ”ํŒ…์ง€ ๋ฉด์ ์„ ๊ตฌํ•œ๋‹ค.
    ํ•ต์‹ฌ 1 - ๊ทธ๋ฆฌ๋”” ํŠน์„ฑ, ํ•ต์‹ฌ 2 - ๊ตฌํ˜„ ํŠน์„ฑ

๊ณ ๋ฏผํ•  ํฌ์ธํŠธ

  • ์–ด๋ ค์šด ํฌ์ธํŠธ. ํ•˜๋ฃจ์— ๊ฐ€์žฅ ๋งŽ์€ ์ผ์ •์˜ ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ•  ๊ฒƒ์ธ๊ฐ€?
  • ๋ชจ๋“  ๋‚ ์งœ(day=365) ๋ณ„๋กœ ๋ช‡๊ฐœ์˜ ์ผ์ •(N=1000)์ด ์žˆ๋Š”์ง€ countํ•œ๋‹ค.
  • 1000 * 365 = 3,650,000 < 1s
import java.io.*;
import java.util.*;

public class Main {

    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static int[] count = new int[366];
    static StringTokenizer st;

    public static void main(String[] args) throws IOException {
        int n = Integer.parseInt(br.readLine());
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            int firstDay = Integer.parseInt(st.nextToken());
            int lastDay = Integer.parseInt(st.nextToken());

            // ์‹œ์ž‘ ์ผ์ž๋ถ€ํ„ฐ ์ข…๋ฃŒ์ผ์ž๊นŒ์ง€ ์ผ์ • ์ˆ˜ ์นด์šดํŠธ
            for (int day = firstDay; day <= lastDay; day++) {
                count[day]++;
            }
        }

        int totalArea = 0;
        int width = 0;
        int height = 0;

        // 1์ผ๋ถ€ํ„ฐ 365์ผ๊นŒ์ง€ ์Šค์บ”ํ•˜๋ฉฐ ์—ฐ์†๋œ ์ผ์ • ๊ทธ๋ฃน ์ฐพ๊ธฐ
        for (int day = 1; day <= 365; day++) {
            if (count[day] > 0) {
                // ํ˜„์žฌ ๋‚ ์งœ์— ์ผ์ •์ด ์žˆ์œผ๋ฉด ํญ ์ฆ๊ฐ€, ๋†’์ด ์—…๋ฐ์ดํŠธ
                width++;
                height = Math.max(height, count[day]);
            } else {
                // ํ˜„์žฌ ๋‚ ์งœ์— ์ผ์ •์ด ์—†์œผ๋ฉด ์ด์ „ ๊ทธ๋ฃน์˜ ๋ฉด์  ๊ณ„์‚ฐ ํ›„ ์ดˆ๊ธฐํ™”
                totalArea += width * height;
                width = 0;
                height = 0;
            }
        }

        totalArea += width * height;
        System.out.println(totalArea);
    }

}

 

๋ฌธ์ œ ์ถœ์ฒ˜: https://www.acmicpc.net/problem/20207