티스토리 뷰
가장 작은 부분문제를 떠올리는 부분이 생각보다 무척 어려웠다.
- 문제의 조건을 정리하면 아래와 같이 표현할 수 있다.
- 앞으로 숫자를 더 지워야 할 때 어떤 숫자의 앞에 그 숫자보다 작은 숫자를 두지 않는 것
- 이를 전개하면, 아래와 같은 로직을 만들 수 있다.
- 앞에서부터 계속 두 개의 숫자를 비교하여
- 앞의 숫자가 작으면 버리고, 아니면 취한다
- 하지만 문제 풀이를 떠올리는 과정에서 특정 상황별 대처 방법을 같이 떠올리고 추가하려고 하다 보니 자연스럽게 가장 작은 부분문제에서 멀어지는 문제가 발생하였고, Greedy한 풀이에서 자꾸만 멀어지는 모습을 확인하였다. Greedy 알고리즘 문제풀이 연습이 좀 더 필요할 것 같다.
- 문제의 조건을 정리하면 아래와 같이 표현할 수 있다.
코드
- 제출 후 다른 풀이를 찾아보니 굉장히 깔끔한 풀이가 있어서 이를 참고하여 코드를 다시 정리하였다. 이렇게 굉장히 심플하고 깔끔한 풀이를 바닥부터 직접 해낼 수 있도록 더 노력해야겠다.
import java.util.Stack;
import java.util.stream.Collectors;
class Solution {
public String solution(String number, int k) {
Stack<Character> stack = new Stack<>();
int countRemoved = 0;
for (char ch : number.toCharArray()) {
while (!stack.isEmpty() && stack.peek() < ch && countRemoved < k) {
stack.pop();
countRemoved++;
}
stack.push(ch);
}
return stack.subList(0, number.length() - k)
.stream()
.map(Object::toString)
.collect(Collectors.joining(""));
}
}
결과
'알고리즘 문제 > Programmers' 카테고리의 다른 글
[프로그래머스] N으로 표현 - Java (0) | 2021.05.19 |
---|---|
[프로그래머스] 입국심사 - Java (0) | 2021.05.19 |
[프로그래머스] 섬 연결하기 - Java (0) | 2021.05.18 |
[프로그래머스] 단속카메라 - Java (0) | 2021.05.18 |
[프로그래머스] 조이스틱 - Java (0) | 2021.05.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DP
- 자바
- Hash
- 힙
- 큐
- 멀리 뛰기
- 자료구조
- BFS
- 연습문제
- 프로그래머스
- greedy
- Sorting
- Algorithm
- stack
- 완전탐색
- 알고리즘
- dynamic programming
- 해시
- 그래프
- programmers
- 동적계획법
- Heap
- 데브코스
- 백준
- dfs
- 정렬
- Queue
- 코딩테스트
- 탐욕법
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함