반응형
SMALL
https://programmers.co.kr/learn/courses/30/lessons/42883
- 주어진 String에서 큰 수를 조합하는건줄 알았는데 그냥 순서 그대로 놓고 제거만해서 가장 큰 수를 만드는 것이었다.
- 2개씩 비교하여 작은 수를 삭제하는 방식
class Solution {
public String solution(String number, int k) {
String answer = "";
StringBuilder sb = new StringBuilder(number); // number 문자열 삭제가 용이하기위해 사용
int index = 1;
int delCount = 0;
while(delCount != k) { // k개 제거할때까지
if(index >= 1 && sb.charAt(index - 1) < sb.charAt(index)) { // 맨 앞에서부터 2개씩 비교해서 뒤의 숫자가 더 크면
sb.deleteCharAt(index - 1); // charAt(index-1)의 숫자가 더 작으므로 앞의 숫자 제거
index--; // 앞의 숫자가 제거되고 하나씩 앞당겨짐
delCount++; // 삭제한 개수 증가
} else { // index가 0이거나 앞의 숫자가 더 크면
if(index == sb.length() - 1 && sb.charAt(index) <= sb.charAt(index - 1)) { // index가 끝까지가면, 그리고 그게 그 전 숫자보다 작으면
sb.deleteCharAt(index); // 작은 숫자를 제거
index--;
delCount++;
} else{
index++;
}
}
}
answer = sb.toString();
return answer;
}
}
- Stack을 이용한 다른 사람 풀이
import java.util.Stack;
class Solution {
public String solution(String number, int k) {
char[] result = new char[number.length() - k];
Stack<Character> stack = new Stack<>();
for (int i = 0; i < number.length(); i++) {
char c = number.charAt(i);
while (!stack.isEmpty() && stack.peek() < c && k-- > 0) {
stack.pop();
}
stack.push(c);
}
for (int i = 0; i < result.length; i++) {
result[i] = stack.get(i);
}
return new String(result);
}
}
반응형
LIST
'JAVA > Algorithm' 카테고리의 다른 글
[프로그래머스/java] 위장 (HashMap - 가능한 조합의 개수) (0) | 2021.01.02 |
---|---|
[프로그래머스/java] 전화번호 목록 (문자열 비교 - hashCode) *2021 첫 글* (0) | 2021.01.01 |
[프로그래머스/java] 더 맵게 (PriorityQueue) (0) | 2020.12.29 |
[프로그래머스/java] H-Index (+ 설명) (0) | 2020.12.29 |
[프로그래머스/java] 가장 큰 수 (+ Comparator / compareTo) (0) | 2020.12.28 |