
-Code
import java.util.*;
class Solution {
public String solution(String number, int k) {
// k개의 숫자 제거를 위한 덱
Deque<Integer> deq = new ArrayDeque<>();
// 제거 시작
for (char n : number.toCharArray()) {
int nowNum = n - '0';
// k가 남았고 현재 수보다 저장된 수가 작으면 제거
while (k > 0 && !deq.isEmpty() && deq.peekLast() < nowNum) {
deq.pollLast();
k--;
}
// 현재 수 추가
deq.addLast(nowNum);
}
StringBuilder answer = new StringBuilder();
// 만약 같은수나 더큰 수가 계속 들어왔을 경우 k가 0보다 큼
// 따라서 해당 부분만큼 잘라줘야 함
int loopCnt = deq.size() - k;
for (int i = 0; i < loopCnt; i++) {
answer.append(deq.pollFirst());
}
return answer.toString();
}
}
처음에 deq에서 제거, 추가 로직은 잘짰으나 틀려서 문제 찾아보니 같거나 큰수가 계속 들어와서 k를 0으로 만들지 못하는 경우를 생각해지 못했습니다. 그래서 해당 부분을 알게되고 deq의 사이즈에 남은 k의 값만큼을 빼고 결과를 출력하도록 하여 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [프로그래머스/Java] 연속된 부분 수열의 합 (0) | 2026.04.09 |
|---|---|
| [백준/Java] 10176번 Opposite Words (0) | 2026.04.09 |
| [백준/Java] 34386번 Tic-Tac-Toe AI (0) | 2026.04.08 |
| [프로그래머스/Java] 서버 증설 횟수 (0) | 2026.04.07 |
| [백준/Java] 33278번 나무와 그림자 easy (0) | 2026.04.07 |