⭐ 문제링크
오늘은 해당 문제의 다른 사람 풀이에 대해 벽을 느끼고 왔다.
import java.util.*;
import java.io.*;
//for문 앞에서 부터 쭉 돌며 가장 큰 값 인덱스 찾기 -> 남은 문자열크기>= number.length-k -> sb.append하기
//1에서 찾은 인덱스를 시작 인덱스로 하고 k-- 후 다시 돌림
class Solution {
public StringBuilder solution(String number, int k) {
StringBuilder sb = new StringBuilder();
int nowDex=0;
int maxIndex=0;
k=number.length()-k; //남아있어야 하는 문자열의 개수로 변경
while(k>0){
maxIndex=nowDex;
for(int i=nowDex; i<=number.length()-k; i++) {
if(number.charAt(maxIndex) < number.charAt(i)) maxIndex=i;
}
sb.append(number.charAt(maxIndex));
k--;
nowDex=maxIndex+1;
}
return sb;
}
}
import java.util.*;
class Solution {
public String solution(String number, int k) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < number.length(); i++) {
char current = number.charAt(i);
while (!stack.isEmpty() && stack.peek() < current && k > 0) {
stack.pop();
k--;
}
stack.push(current);
}
// k가 남아 있는 경우 스택의 끝에서부터 제거
while (k > 0) {
stack.pop();
k--;
}
// Stack을 String으로 변환
StringBuilder answer = new StringBuilder();
for (char c : stack) {
answer.append(c);
}
return answer.toString();
}
}
wow stack을 이렇게 사용할 수 있구낭