[BOJ] 2493. ํƒ‘ (๐Ÿฅ‡, ์Šคํƒ)

lemythe423ยท2023๋…„ 11์›” 22์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
72/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

โš ๏ธ ๋ฌธ์ œ ์š”์•ฝ

ํƒ‘์—์„œ ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๋ ˆ์ด์ €๋ฅผ ์ˆ์„ ๋•Œ ์ˆ˜์‹ ํ•˜๊ฒŒ ๋˜๋Š” ํƒ‘์˜ ๋†’์ด๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ. ๋ ˆ์ด์ €๋ฅผ ์œ ํƒ‘์˜ ๋†’์ด๋ณด๋‹ค ๋†’์€ ๋†’์ด๋ฅผ ๊ฐ–๋Š” ํƒ‘๋งŒ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก ์•„์ด๋””์–ด

ํ˜„์žฌ ํƒ‘์˜ ์œ„์น˜๋ณด๋‹ค ๋†’์€ ์œ„์น˜์˜ ํƒ‘ ์œ„์น˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•ด๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค. ์ „์ฒด ํƒ‘์˜ ๊ฐœ์ˆ˜๊ฐ€ 50๋งŒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ํƒ‘์— ๋Œ€ํ•ด์„œ ๋งค๋ฒˆ ์™ผ์ชฝ์„ ์ผ์ผ์ด ํƒ์ƒ‰ํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๋‚จ.

๊ฒฐ๊ตญ ํ˜„์žฌ ํƒ‘์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์— ์žˆ๋Š” ํƒ‘๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ด๋‘๊ณ  ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ์œ ์šฉํ•˜๊ฒŒ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํ˜„์žฌ ํƒ‘์˜ ์œ„์น˜๋ณด๋‹ค ๋†’๊ธฐ๋งŒํ•˜๋ฉด ๋˜๊ณ  ์–ผ๋งˆ๋‚˜ ๋” ๋†’์€์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค. ์™ผ์ชฝ์— ์œ„์น˜ํ•ด ์žˆ์œผ๋ฉด์„œ ์–ด์จŒ๋“  ๋†’๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ํƒ‘์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ํ•˜๋‚˜์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉด ๋œ๋‹ค.

์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ฉด์„œ(์ €์žฅ), ๊ฐ’์„ ๊บผ๋‚ด ํ™•์ธํ•  ๋•Œ๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ฐพ์•„์•ผ ํ•˜๋Š” ๋ฐฉ์‹์€ LIFO์ธ ์Šคํƒ์ด ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค.

๋ชจ๋“  ํƒ‘์— ๋Œ€ํ•ด์„œ ์šฐ์„ ์ ์œผ๋กœ ์Šคํƒ์—์„œ ์ž์‹ ๋ณด๋‹ค ๋†’์€ ํƒ‘์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค. ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆœ์„œ(์˜ค๋ฅธ์ชฝ -> ์™ผ์ชฝ)์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋˜๋ฉฐ ์ž์‹ ๋ณด๋‹ค ๋‚ฎ์€ ํƒ‘์€ ์Šคํƒ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค. ๋” ๋†’์€ ์œ„์น˜์˜ ํƒ‘์„ ์ฐพ๊ฒŒ ๋˜๋ฉด ํƒ์ƒ‰์„ ์ค‘๋‹จํ•˜๊ณ , ํƒ‘์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. ์ดํ›„ ์ž์‹ ์˜ ๋†’์ด๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋œ๋‹ค.

์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ stack.isEmpty() ๋ฅผ ์“ฐ๋Š” ๋Œ€์‹ ์— ์ ˆ๋Œ€ ๊บผ๋‚ด์ง€์ง€ ์•Š์„ ๊ฐ’์„ ๋ฏธ๋ฆฌ ์ €์žฅํ–ˆ๋‹ค. ์™ผ์ชฝ์— ๋” ๋†’์€ ๋†’์ด์˜ ํƒ‘์ด ์—†๋Š” ๊ฒฝ์šฐ 0์ด ์ €์žฅ๋œ๋‹ค. ๊ฐ€์žฅ ๋†’์€ ๋†’์ด์˜ ํƒ‘์ด 1์–ต์ด๊ธฐ ๋•Œ๋ฌธ์— 1์–ต๋ณด๋‹ค ๋†’์€ ๋†’์ด์˜ ํƒ‘์„ ๋ฏธ๋ฆฌ tower ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ์•ž์— ์ €์žฅํ•ด๋†“๊ณ  ์Šคํƒ์—๋„ ์ธ๋ฑ์Šค 0๊ฐ’์„ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด์„œ ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

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

public class Main {
    private static final int MAX_HEIGHT = 100_000_001;
    public static void main(String[] args) throws IOException {
        // ์ž…๋ ฅ๊ฐ’ ๋ฐ›๊ธฐ
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        StringTokenizer st = new StringTokenizer(br.readLine());
        int[] tower = new int[n+1];
        tower[0] = MAX_HEIGHT;
        for (int i = 0; i < n; i++) {
            tower[i+1] = Integer.parseInt(st.nextToken());
        }

        // ์Šคํƒ ์ƒ์„ฑ
        Stack<Integer> stack = new Stack<>();
        stack.push(0);

        // tower ๋ฐฐ์—ด ๊ฐ’ ์Šคํƒ์— ์ €์žฅ
        int[] answer = new int[n];
        for (int i = 0; i < n; i++) {
            int now_height = tower[i+1];
            while(tower[stack.peek()] < now_height) {
                stack.pop();
            }
            answer[i] = stack.peek();
            stack.push(i+1);
        }
        
        
        // ์ถœ๋ ฅ
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append(answer[i] + " ");
        }
        System.out.println(sb.toString());
    }
}
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€