본문 바로가기
알고리즘/백준

[Java] 2812 크게 만들기

by Garonguri 2022. 3. 29.
728x90

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

 

2812번: 크게 만들기

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

www.acmicpc.net

[틀린 코드]

- 정렬해서 K개만큼 빼주면 될 줄 알았던 나 자신을 반성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
 
public class bj2812 {
 
    static int N,K;
    static Integer[] original;
    static Integer[] arr;
    static Integer[] delete;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st=  new StringTokenizer(br.readLine(), " ");
        StringBuilder sb = new StringBuilder();
        N = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());
        arr = new Integer[N];
 
        String str = br.readLine();
        for(int i=0;i<N;i++){
            arr[i]= Integer.parseInt(Character.toString(str.charAt(i)));
        }
        original = Arrays.copyOf(arr, arr.length);
        Arrays.sort(arr);
        delete = Arrays.copyOfRange(arr,0,K);
        int cnt=0;
        for(Integer i : original){
            sb.append(i.toString());
        }
        String answer = sb.toString();
        for(int i=0;i<K;i++){
            String del = delete[i].toString();
            System.out.println(del);
            answer = answer.replaceFirst(del, "");
        }
        System.out.println(answer);
 
    }
 
 
}
 
cs

[정답]

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.ArrayDeque;
import java.util.Deque;

public class bj2812 {
    static int N;
    static int K;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();
        N = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());

        String tmp = br.readLine();
        Deque<Character> dq = new ArrayDeque<>();
        for (int i = 0; i < N; i++) {
            System.out.println("현재 Deque : " + dq.toString());
            System.out.println("지금 보고 있는 원소 : " +tmp.charAt(i));
            while(K>0 && !dq.isEmpty() && dq.getLast() < tmp.charAt(i)) {
                String ch = dq.getLast().toString();
                System.out.println("덱의 마지막 원소 : " +  ch);
                dq.removeLast();
                System.out.println("현재 보고있는 원소 [" + tmp.charAt(i) + "]가 덱의 마지막 원소 [" + ch + "]보다 크다.");
                K--;
            }
            dq.addLast(tmp.charAt(i));
        }
        System.out.println("덱 : " +dq.toString());

        for(int i=0;i<dq.size();i++) {
            sb.append(dq.removeFirst());
            i--;
        }
        System.out.println(sb);
    }
}
728x90

댓글