ABOUT ME

Today
Yesterday
Total
  • [백준 2812] 크게 만들기
    PS/Java 2022. 3. 30.

    N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.


    입력

    첫째 줄에 N과 K가 주어진다. (1 ≤ K < N ≤ 500,000)

    둘째 줄에 N자리 숫자가 주어진다. 이 수는 0으로 시작하지 않는다.

    출력

    입력으로 주어진 숫자에서 K개를 지웠을 때 얻을 수 있는 가장 큰 수를 출력한다.


    예제 입력 3

    10 4
    4177252841

    예제 출력 3

    775841

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.ArrayDeque;
    import java.util.Deque;
    import java.util.StringTokenizer;
    public class Main {
        public static void main(String[] args) throws Exception {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
            st.nextToken();
            int K = Integer.parseInt(st.nextToken());
            Deque<Character> deque = new ArrayDeque<>();
    
            String num = br.readLine();
            char[] arr = num.toCharArray();
    
            for (char c : arr) {
                while (true) {
                    if (K <= 0 || deque.isEmpty() || c <= deque.getLast()) {
                        break;
                    }
                    deque.removeLast();
                    K--;
                }
                deque.addLast(c);
            }
    
            StringBuilder sb = new StringBuilder();
            while(deque.size() > K) {
                sb.append(deque.removeFirst());
            }
    
            System.out.println(sb);
        }
    }

    현재 숫자와 덱의 마지막숫자를 비교하면서 작으면 버리고 크면 넣는 방식을 이용하였다.

    'PS > Java' 카테고리의 다른 글

    [백준 2607] 비슷한 단어  (0) 2022.03.30
    [백준 14502] 연구소  (0) 2022.03.30
    [백준 2564] 경비원  (0) 2022.03.30
    [백준 7562] 나이트의 이동  (0) 2022.03.30
    [백준 4673] 셀프 넘버  (0) 2022.03.30

    댓글

Designed by Tistory.