๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

[๋ฐฑ์ค€ 17298] ์˜คํฐ์ˆ˜ : Stack ๋ณธ๋ฌธ

Study/์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ตฌํ˜„ ๋ฌธ์ œํ’€์ด

[๋ฐฑ์ค€ 17298] ์˜คํฐ์ˆ˜ : Stack

Shinjio 2024. 11. 6. 23:23
๋ฐ˜์‘ํ˜•

๐Ÿ”Ž ๋ฌธ์ œ

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

๋ฌธ์ œ ์„ค๋ช…

ํฌ๊ธฐ๊ฐ€ N์ธ ์ˆ˜์—ด A = A1, A2, ..., AN์ด ์žˆ๋‹ค. ์ˆ˜์—ด์˜ ๊ฐ ์›์†Œ Ai์— ๋Œ€ํ•ด์„œ ์˜คํฐ์ˆ˜ NGE(i)๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค. Ai์˜ ์˜คํฐ์ˆ˜๋Š” ์˜ค๋ฅธ์ชฝ์— ์žˆ์œผ๋ฉด์„œ Ai๋ณด๋‹ค ํฐ ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ์˜คํฐ์ˆ˜๋Š” -1์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A = [3, 5, 2, 7]์ธ ๊ฒฝ์šฐ NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1์ด๋‹ค. A = [9, 5, 4, 8]์ธ ๊ฒฝ์šฐ์—๋Š” NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์— ์ˆ˜์—ด A์˜ ์›์†Œ A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ด N๊ฐœ์˜ ์ˆ˜ NGE(1), NGE(2), ..., NGE(N)์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๐ŸŽ ๋ฌธ์ œํ’€์ด

๋ฌธ์ œ ํ•ด๊ฒฐ์˜ ํ•ต์‹ฌ์€ ์Šคํƒ์— ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ์Œ“๊ณ , ์Šคํƒ์—์„œ pop()ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์ •๋‹ต ์ˆ˜์—ด์„ ์˜คํฐ์ˆ˜๋กœ ์ฑ„์šฐ๋Š” ๊ฒƒ์ด๋‹ค. 

์ฆ‰, ์ž…๋ ฅ์—์„œ ์ฃผ์–ด์ง„ ์ˆ˜์—ด(array)๊ฐ€ ์žˆ๊ณ , ์ถœ๋ ฅํ•  ์ •๋‹ต ์ˆ˜์—ด(answerArray) ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ ํ’€์ด๋ฅผ ์œ„ํ•œ ์Šคํƒ(myStack)์ด ํ•„์š”ํ•˜๋‹ค. 

 

์ž…๋ ฅ์—์„œ ์ฃผ์–ด์ง„ ์ˆ˜์—ด์„ ์ฐจ๋ก€๋Œ€๋กœ ํ™•์ธํ•˜๋ฉฐ, 

๋งŒ์•ฝ ์Šคํƒ์— ๋งˆ์ง€๋ง‰์— ์Œ“์ด ๊ฐ’(peek)๋ณด๋‹ค ๋‹ค์Œ ์ฐจ๋ก€๋กœ ๋“ค์–ด์˜ฌ ์ž…๋ ฅ ์ˆ˜์—ด์˜ ๊ฐ’์ด ํฌ๋‹ค๋ฉด ์ด ์ˆ˜์—ด์˜ ๊ฐ’์€ '์˜คํฐ์ˆ˜'์— ํ•ด๋‹นํ•˜๊ณ , ์Šคํƒ์—๋Š” ์ž…๋ ฅ ์ˆ˜์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๊ณ , ์ •๋‹ต ์ˆ˜์—ด์€ ์Šคํƒ์— ์ €์žฅ๋œ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋‹น ์ธ๋ฑ์Šค์— ์˜คํฐ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ‘ธ๋Š” ๊ฒƒ์ด๋‹ค. (answerArray[myStack.pop()] = array[i])

 

์œ„์˜ ๋‚ด์šฉ์„ java ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

 

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

public class P17298_์˜คํฐ์ˆ˜๊ตฌํ•˜๊ธฐ {

    /**
     * ๋ฌธ์ œ ํ’€์ด ๋ฐฉ๋ฒ•
     * 1. ์ฒซ๋ฒˆ์งธ ์ˆ˜์—ด์€ ์Šคํƒ์— ๋ฌด์กฐ๊ฑด ์Œ“๋Š”๋‹ค.
     * 2. ๋‘๋ฒˆ์งธ ์ˆ˜์—ด๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ˆ˜์—ด๊นŒ์ง€๋Š” ๋ฐ˜๋ณต์œผ๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค.
     * 3. ๋งŒ์•ฝ ์Šคํƒ์— ๋งˆ์ง€๋ง‰์œผ๋กœ ์ €์žฅ๋œ ๊ฐ’(stack.peek()) < ๋‹ค์Œ ์ˆ˜์—ด => ์Šคํƒ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊บผ๋‚ด์„œ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋‹ค์Œ ์ˆ˜์—ด ๊ฐ’ ์ €์žฅ
     * 4. ๋งŒ์•ฝ ์Šคํƒ์— ๋งˆ์ง€๋ง‰์œผ๋กœ ์ €์žฅ๋œ ๊ฐ’(stack.peer()) >= ๋‹ค์Œ ์ˆ˜์—ด => stack.push()
     * 5. ๋ฐ˜๋ณต๋ฌธ์ด ๋๊นŒ์ง€ ๋ˆ ํ›„ ๊ฐ’์ด ๋น„์–ด์žˆ๋Š” ์ธ๋ฑ์Šค์— -1 ๊ฐ’ ๋„ฃ๊ธฐ
     *
     * ํ’€์ด์˜ ํ•ต์‹ฌ
     * popํ•œ ์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ •๋‹ต ์ˆ˜์—ด์— ์˜คํฐ์ˆ˜ ์ €์žฅ
     */
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int size = Integer.parseInt(br.readLine());
        String arrayString = br.readLine();
        int[] array = new int[size]; 
        for(int i = 0 ; i < size ; i++){ //์ˆ˜์—ด ์ƒ์„ฑ
            array[i] = Integer.parseInt(arrayString.split(" ")[i]);
        }
        int[] answer = new int[size];
        Stack<Integer> stack = new Stack<>();
        
        //์ฒซ๋ฒˆ์งธ ์ˆ˜์—ด์€ ๋ฌด์กฐ๊ฑด ์Šคํƒ์— ์Œ“๋Š”๋‹ค. 
        stack.push(0);
        for(int i = 1 ; i < size ; i++){
            while(!stack.isEmpty() && array[stack.peek()] < array[i]){ //์Šคํƒ์˜ TOP(INDEX)์— ๋Œ€ํ•œ ์ˆ˜์—ด์˜ ๊ฐ’ < ๋“ค์–ด์˜ฌ ์ˆ˜์—ด์˜ ๊ฐ’
                answer[stack.pop()] = array[i]; //์ •๋‹ต ์ˆ˜์—ด์˜ POPํ•œ INDEX์— ๋“ค์–ด์˜ฌ ์ˆ˜์—ด์˜ ๊ฐ’ ์ €์žฅ
            }
            stack.push(i); //์ธ๋ฑ์Šค ์ €์žฅ
        }

        while(!stack.empty()){ //์Šคํƒ์ด ๋น„์›Œ์งˆ ๋•Œ๊นŒ์ง€
            answer[stack.pop()] = -1; //์ •๋‹ต ์ˆ˜์—ด์—์„œ ๋น„์–ด์žˆ๋Š” ์ธ๋ฑ์Šค์— -1 ์ €์žฅ
        }

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        for(int i : answer){
            bw.write(i + " ");
        }
        bw.close();
    }
}

 

 

๋ฐ˜์‘ํ˜•