b.1725 ํžˆ์Šคํ† ๊ทธ๋žจ

2025. 2. 6. 21:59ยทAlgorithm & Data Structures/BOJ

 

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

 

 

 

๐Ÿ“Œ ์ž๋ฐ”(Java)๋กœ ํ‘ธ๋Š” ํžˆ์Šคํ† ๊ทธ๋žจ์—์„œ ๊ฐ€์žฅ ํฐ ์ง์‚ฌ๊ฐํ˜• ๋ฌธ์ œ ํ’€์ด

๐Ÿ”Ž ๋ฌธ์ œ ๊ฐœ์š”

์ด ๋ฌธ์ œ๋Š” ๋ฐฑ์ค€ "ํžˆ์Šคํ† ๊ทธ๋žจ์—์„œ ๊ฐ€์žฅ ํฐ ์ง์‚ฌ๊ฐํ˜• (1725๋ฒˆ)" ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
์ฃผ์–ด์ง„ ํžˆ์Šคํ† ๊ทธ๋žจ์—์„œ ๊ฐ€์žฅ ํฐ ์ง์‚ฌ๊ฐํ˜•์˜ ๋„“์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์ œ ์ž…๋ ฅ

7
2
1
4
5
1
3
3

๐Ÿ’ก ์˜ˆ์ œ ์ถœ๋ ฅ

8

์œ„ ์ž…๋ ฅ์— ๋Œ€ํ•œ ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๊ทธ๋ ค๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด๋•Œ, ๊ฐ€์žฅ ํฐ ์ง์‚ฌ๊ฐํ˜•์˜ ๋„“์ด๋Š” 8์ž…๋‹ˆ๋‹ค.


๐Ÿ›  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ‘๊ทผ ๋ฐฉ์‹

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์Šคํƒ(Stack) ์„ ํ™œ์šฉํ•œ O(N) ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

โœ๏ธ ์ฃผ์š” ๊ณ ๋ ค ์‚ฌํ•ญ

  1. ๊ฐ ํžˆ์Šคํ† ๊ทธ๋žจ ๋ง‰๋Œ€์˜ ๋†’์ด(h)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ง์‚ฌ๊ฐํ˜•์˜ ๋„“์ด๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์Šคํƒ์„ ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๋„“์ด๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์Šคํƒ์—๋Š” ํ•ญ์ƒ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ €์žฅํ•˜์—ฌ, ํ˜„์žฌ ๋†’์ด๋ณด๋‹ค ๋‚ฎ์•„์ง€๋Š” ๊ฒฝ์šฐ ๋„“์ด๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
  4. ์Šคํƒ์ด ๋นŒ ๋•Œ๊นŒ์ง€ ๋‚จ์€ ๋†’์ด๋“ค์— ๋Œ€ํ•œ ๋„“์ด๋„ ์ตœ์ข…์ ์œผ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น Java ์ฝ”๋“œ ํ•ด์„ค

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class b1725 {

    static int N;             // ํžˆ์Šคํ† ๊ทธ๋žจ์˜ ๋ง‰๋Œ€ ๊ฐœ์ˆ˜
    static long answer;       // ๊ฐ€์žฅ ํฐ ์ง์‚ฌ๊ฐํ˜•์˜ ๋„“์ด
    static Stack<int[]> stack; // ๋†’์ด์™€ ์‹œ์ž‘ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ

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

        N = Integer.parseInt(br.readLine()); // ๋ง‰๋Œ€ ๊ฐœ์ˆ˜ ์ž…๋ ฅ
        stack = new Stack<>();
        answer = 0;

        for (int i = 0; i < N; i++) {
            int num = Integer.parseInt(br.readLine()); // ํ˜„์žฌ ๋ง‰๋Œ€ ๋†’์ด ์ž…๋ ฅ
            int start = i;  // ๋ง‰๋Œ€๊ฐ€ ์‹œ์ž‘๋œ ์œ„์น˜

            // ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๋†’์ด๊ฐ€ ๋‚˜์˜ค๋ฉด ๋„“์ด ๊ณ„์‚ฐ
            while (!stack.isEmpty() && stack.peek()[0] > num) {
                int[] top = stack.pop();
                answer = Math.max(answer, (long) top[0] * (i - top[1]));
                start = top[1]; // ์‹œ์ž‘ ์œ„์น˜ ์—…๋ฐ์ดํŠธ
            }

            stack.push(new int[]{num, start}); // ํ˜„์žฌ ๋ง‰๋Œ€ ์ €์žฅ
        }

        // ์Šคํƒ์— ๋‚จ์•„ ์žˆ๋Š” ๋†’์ด๋“ค์— ๋Œ€ํ•œ ๋„“์ด ๊ณ„์‚ฐ
        while (!stack.isEmpty()) {
            int[] top = stack.pop();
            answer = Math.max(answer, (long) top[0] * (N - top[1]));
        }

        System.out.println(answer); // ๊ฒฐ๊ณผ ์ถœ๋ ฅ
    }
}

๐Ÿ” ์ฝ”๋“œ ์„ค๋ช…

๐Ÿ“Œ 1. ์Šคํƒ ํ™œ์šฉํ•œ ๋„“์ด ๊ณ„์‚ฐ

static Stack<int[]> stack;
  • ์Šคํƒ์—๋Š” {๋†’์ด, ์‹œ์ž‘ ์œ„์น˜} ์Œ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์œ ์ง€๋˜๋ฉฐ, ๋‚ฎ์•„์ง€๋Š” ๊ฒฝ์šฐ ์Šคํƒ์„ ๋น„์šฐ๋ฉด์„œ ๋„“์ด๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ 2. ํ˜„์žฌ ๋†’์ด๊ฐ€ ๊ธฐ์กด ์Šคํƒ๋ณด๋‹ค ๋‚ฎ์œผ๋ฉด ๋„“์ด ๊ณ„์‚ฐ

while (!stack.isEmpty() && stack.peek()[0] > num) {
    int[] top = stack.pop();
    answer = Math.max(answer, (long) top[0] * (i - top[1]));
    start = top[1]; // ์‹œ์ž‘ ์œ„์น˜ ์—…๋ฐ์ดํŠธ
}
  • ํ˜„์žฌ ๋†’์ด๊ฐ€ ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ๋ณด๋‹ค ๋‚ฎ๋‹ค๋ฉด, ๋„“์ด๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•จ
  • ๋„“์ด ๊ณ„์‚ฐ ๊ณต์‹:
    ํ˜„์žฌ ๋ง‰๋Œ€ ๋†’์ด * (ํ˜„์žฌ ์ธ๋ฑ์Šค - ์ €์žฅ๋œ ์‹œ์ž‘ ์ธ๋ฑ์Šค)
    
  • ์Šคํƒ์˜ ๋†’์ด๊ฐ€ ๋‚ฎ์•„์งˆ ๋•Œ๊นŒ์ง€ pop()ํ•˜๋ฉด์„œ ๋„“์ด๋ฅผ ๊ฐฑ์‹ 

๐Ÿ“Œ 3. ์Šคํƒ์— ๋‚จ์•„ ์žˆ๋Š” ๊ฐ’ ์ฒ˜๋ฆฌ

while (!stack.isEmpty()) {
    int[] top = stack.pop();
    answer = Math.max(answer, (long) top[0] * (N - top[1]));
}
  • ๋ฐฐ์—ด์˜ ๋๊นŒ์ง€ ๊ฐ”์„ ๋•Œ, ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ตœ์ข…์ ์œผ๋กœ ๋‚จ์€ ๊ฐ’๋“ค์„ ๊ณ„์‚ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋„“์ด ๊ณต์‹:
    ๋†’์ด * (์ „์ฒด ๊ธธ์ด - ์‹œ์ž‘ ์œ„์น˜)
    

๐Ÿ”ฅ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„

์—ฐ์‚ฐ ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ˆ˜ํ–‰ ํšŸ์ˆ˜ ์‹œ๊ฐ„ ๋ณต์žก๋„
for ๋ฃจํ”„ N O(N)
while ๋ฃจํ”„ (์Šคํƒ์—์„œ pop) N O(N)
while ๋ฃจํ”„ (๋งˆ์ง€๋ง‰ ์ฒ˜๋ฆฌ) N O(N)
์ดํ•ฉ O(N)  

๐Ÿ“Œ ๊ฒฐ๋ก 
๐Ÿ‘‰ ๋ชจ๋“  ์—ฐ์‚ฐ์ด O(N) ์ด๋‚ด๋กœ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.


๐Ÿ† ์ •๋ฆฌ

โœ… ํ•ต์‹ฌ ํฌ์ธํŠธ

  1. ์Šคํƒ์„ ํ™œ์šฉํ•˜์—ฌ ํžˆ์Šคํ† ๊ทธ๋žจ์˜ ๋„“์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.
  2. ๋†’์ด๊ฐ€ ๋‚ฎ์•„์ง€๋Š” ์ˆœ๊ฐ„ ์Šคํƒ์„ ๋น„์šฐ๋ฉด์„œ ์ง์‚ฌ๊ฐํ˜• ๋„“์ด๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
  3. ๋ฐฐ์—ด์˜ ๋๊นŒ์ง€ ๊ฐ”์„ ๋•Œ, ๋‚จ์€ ์Šคํƒ์„ ํ•œ ๋ฒˆ ๋” ์ฒดํฌํ•œ๋‹ค.
  4. ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ O(N)์œผ๋กœ ์ตœ์ ํ™”ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•œ๋‹ค.

๐ŸŽฏ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์žฅ์ 

โœ” ์Šคํƒ์„ ํ™œ์šฉํ•œ O(N) ํ’€์ด๋กœ ํšจ์œจ์ 
โœ” ์ง์‚ฌ๊ฐํ˜• ๋„“์ด๋ฅผ ๋น ๋ฅด๊ฒŒ ํƒ์ƒ‰ ๊ฐ€๋Šฅ
โœ” ๋‹ค๋ฅธ "Largest Rectangle" ๋ฌธ์ œ์—์„œ๋„ ํ™œ์šฉ ๊ฐ€๋Šฅ


์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด, ์ข‹์•„์š”์™€ ๊ณต์œ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๐Ÿ˜Š

 

 

'Algorithm & Data Structures > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

b24480. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ 2  (0) 2025.03.01
b3015. ์˜ค์•„์‹œ์Šค ์žฌ๊ฒฐํ•ฉ  (0) 2025.02.25
b.17299 ์˜ค๋“ฑํฐ์ˆ˜  (1) 2025.02.04
b24497. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ 1  (0) 2025.01.27
b.17298 ์˜คํฐ์ˆ˜  (1) 2025.01.23
'Algorithm & Data Structures/BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • b24480. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ 2
  • b3015. ์˜ค์•„์‹œ์Šค ์žฌ๊ฒฐํ•ฉ
  • b.17299 ์˜ค๋“ฑํฐ์ˆ˜
  • b24497. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ 1
Geisha
Geisha
๊ฐœ๋ฐœ ์ผ๊ธฐ
  • Geisha
    Geisha
    Geisha
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (326)
      • Algorithm & Data Structures (246)
        • BOJ (104)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (27)
        • SQL (21)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • ์šด์˜์ฒด์ œ (13)
        • ๋„คํŠธ์›Œํฌ (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์ „์œ„์ˆœํšŒ
    ๊ตฌํ˜„
    algorithm
    ๋ฐฑ์ค€
    ๊ฒฝ๋กœ์••์ถ•
    dp
    binarySearch
    BFS
    ํ›„์œ„์ˆœํšŒ
    ์ด๋ถ„ํƒ์ƒ‰
    PriorityQueue
    SQL
    Union-Find
    ๋ฐฑํŠธ๋ž˜ํ‚น
    ์Šคํƒ
    ์œ ๋‹ˆ์˜จํŒŒ์ธ๋“œ
    Dijkstra
    ํˆฌํฌ์ธํ„ฐ
    ๋‹ค์ต์ŠคํŠธ๋ผ
    programmers
    DynamicProgramming
    ๊ณจ๋“œ
    dfs
    Java
    baekjoon
    ๋™์ ๊ณ„ํš๋ฒ•
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    Stack
    unionfind
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Geisha
b.1725 ํžˆ์Šคํ† ๊ทธ๋žจ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”