์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[ ๋ฐฑ์ค€ / BOJ 2812 ] ํฌ๊ฒŒ ๋งŒ๋“ค๊ธฐ ( JAVA / ์ž๋ฐ” )

KIMHYEYUN 2021. 10. 7. 18:55
๋ฐ˜์‘ํ˜•

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

 

2812๋ฒˆ: ํฌ๊ฒŒ ๋งŒ๋“ค๊ธฐ

N์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์—ฌ๊ธฐ์„œ ์ˆซ์ž K๊ฐœ๋ฅผ ์ง€์›Œ์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

 

๋ฌธ์ œ


N์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์—ฌ๊ธฐ์„œ ์ˆซ์ž K๊ฐœ๋ฅผ ์ง€์›Œ์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ


์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ K < N ≤ 500,000)

๋‘˜์งธ ์ค„์— N์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด ์ˆ˜๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ


์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ˆซ์ž์—์„œ K๊ฐœ๋ฅผ ์ง€์› ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

ํ’€์ด


stack์„ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐ โ€ผ๏ธ

 

stack.peek() ์ด ํ˜„์žฌ ๊ฐ’๋ณด๋‹ค ์ž‘๊ณ  && K > 0 (์•„์ง ๋บ„ ์ˆ˜ ์žˆ๋‹ค ) ๋ฉด pop()

๊ทธ ํ›„, K ๊ฐœ ๋งŒํผ ์ œ๊ฑฐํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— pop ์„ ํ•ด์ฃผ๋ฉด ๋„์•โ€ผ๏ธ

 

์ฝ”๋“œ


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

public class Main_BOJ_2812_ํฌ๊ฒŒ๋งŒ๋“ค๊ธฐ {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(stringTokenizer.nextToken());
        int K = Integer.parseInt(stringTokenizer.nextToken());
        int len = N - K;

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

        String str = br.readLine();

        for(int i = 0; i < str.length() ; i++){
            if(!stack.empty()){
                while(!stack.empty() && K > 0 && stack.peek() < str.charAt(i)){
                    stack.pop();
                    K--;
                }
            }
            
            stack.push(str.charAt(i));
        }

        while(true){
            if(stack.size() == len)
                break;
            
            stack.pop();
        }

        while(!stack.isEmpty()){
            sb.append(stack.pop());
        }

        System.out.println(sb.reverse().toString());
        
    }
}

 

728x90
๋ฐ˜์‘ํ˜•