문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42883
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 풀이
왼 쪽부터 오른 쪽 숫자들과 비교하면서 작은 수를 지워가면서 가장 큰 수를 만들어주면 된다. 사실 Stack을 생각 못 하고, 더 어렵고 지져분하게 코드를 하다가 힌트를 보고 stack으로 구현했다.
작성한 코드 (정답)
import java.util.*;
class Solution {
public String solution(String number, int k) {
String[] numberString = number.split("");
Deque<String> stack = new ArrayDeque<>();
for (int i = 0; i < numberString.length; i++) {
while (!stack.isEmpty()
&& Integer.parseInt(numberString[i]) > Integer.parseInt(stack.peek())
&& k-- > 0
) {
stack.pop();
}
stack.push(numberString[i]);
}
StringBuilder result = new StringBuilder();
while (!stack.isEmpty()) {
result.append(stack.pop());
}
if (k > 0) {
return result.reverse().substring(0, result.toString().length() - k);
}
return result.reverse().toString();
}
}'자료구조 & 알고리즘 > 문제 풀이 (프로그래머스)' 카테고리의 다른 글
| 두 큐 합 같게 만들기 (투 포인터) (0) | 2026.07.02 |
|---|---|
| 연속된 부분 수열의 합 (투 포인터) (0) | 2026.07.01 |
| 택배상자 (큐, 스택) (0) | 2026.06.29 |
| 쿼드압축 후 개수 세기 (백트래킹) (0) | 2026.06.26 |
| 모음 사전 (DFS) (0) | 2026.06.25 |
