Algorithm๐Ÿฅ‡

17298.์˜คํฐ์ˆ˜

hae02y 2023. 10. 16. 08:22
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

ํฌ๊ธฐ๊ฐ€ 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)์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งžํžŒ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
1 ์ดˆ 512 MB 72922 25497 18035 33.558%
https://www.acmicpc.net/problem/17298

ํ’€์ด

์ฝ”๋“œ

์ฒซ๋ฒˆ์งธ ์‹œ๋„

public class ์˜คํฐ์ˆ˜ {  

    public static void main(String[] args) throws IOException {  

        //Ai ๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์— ์žˆ์œผ๋ฉด์„œ Ai๋ณด๋‹ค ํฐ์ˆ˜ ์ค‘์—์„œ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š”์ˆ˜. ์ˆ˜๊ฐ€์—†์œผ๋ฉด -1 ์ด๋‹ค.  

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        StringBuilder sb = new StringBuilder();  
        int N = Integer.parseInt(br.readLine());  

        Stack<Integer> stack = new Stack<>();  

        String[] arr = br.readLine().split(" ");  

        int now = 0;  
        int last = 0;  

        for(int i=0; i<N; i++){  
            now = Integer.parseInt(arr[i]);  

            for(int j=i+1; j<N; j++){  
                if(now < Integer.parseInt(arr[j])) stack.push(Integer.parseInt(arr[j]));  
            }  

            if(stack.isEmpty()){  
                sb.append(-1).append(" ");  
            }else {  
                    last = stack.firstElement();  
                    stack.clear();  
                sb.append(last).append(" ");  
            }  
        }  
        System.out.println(sb);  
        br.close();  
    }  
}

์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
![[Pasted image 20231012143842.png]]

๋‘๋ฒˆ์งธ ์‹œ๋„ - ์„ฑ๊ณต

package ๊ธฐ์ดˆ1.Day03.์ •ํ•ด์˜;  

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

public class ์˜คํฐ์ˆ˜ {  

    public static void main(String[] args) throws IOException {  

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        Stack<Integer> stack = new Stack<>();  

        int N = Integer.parseInt(br.readLine());  
        int[] seq = new int[N];  

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");  

        for (int i=0; i<N; i++){  
            seq[i] = Integer.parseInt(st.nextToken());  
        }  

        for(int i=0; i<N; i++){  

            //์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด์„œ, ํ˜„์žฌ์˜ ์›์†Œ(seq[i])๊ฐ€ ์Šคํƒ์˜ ๋งจ์œ„ ์›์†Œ๋ณด๋‹ค ํฐ๊ฒฝ์šฐ,  
            //ํ•ด๋‹น์กฐ๊ฑด์„ ๋งŒ์กฑํ• ๋•Œ๊นŒ์ง€ stack์˜ ์›์†Œ๋ฅผ pop ํ•˜๋ฉด์„œ ํ•ด๋‹น์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ํ˜„์žฌ์˜ ์›์†Œ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.  
            while (!stack.isEmpty() && seq[stack.peek()] <seq[i]){  
                seq[stack.pop()] = seq[i];  
            }  
            stack.push(i); //์ธ๋ฑ์Šค๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.  
        }  

        /*  
        ์Šคํƒ์˜ ๋ชจ๋“ ์›์†Œ๋ฅผ pop ํ•˜๋ฉด์„œ ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ value๋ฅผ -1๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.  
         */        while (!stack.isEmpty()){  
            seq[stack.pop()] = -1;  
        }  

        StringBuilder sb = new StringBuilder();  
        for(int i=0; i<N; i++){  
            sb.append(seq[i]).append(' ');  
        }  

        System.out.println(sb);  
    }  
}
๋ฐ˜์‘ํ˜•