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
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 11062 - 카드 게임 (0) | 2022.08.30 |
---|---|
[Java] 2580 스도쿠 - DFS, BackTracking (0) | 2022.04.01 |
[Java] 2573 - 빙산 - BFS, 시뮬레이션 (0) | 2022.03.10 |
[Java] 1238 파티 - 다익스트라 (0) | 2022.03.10 |
[Java] 2606 바이러스 - BFS (0) | 2022.03.10 |
댓글