이번에는 풀이부터 먼저 봤다.(뭔가 진 느낌 ㅠㅠㅠㅠ)
class Solution {
public String solution(String number, int k) {
String answer = "";
int delcnt = 0;
int index = 0;
StringBuilder sb = new StringBuilder(number);
while(delcnt != k){
if(index >= 0 && sb.charAt(index) < sb.charAt(index+1)){
sb.deleteCharAt(index);
delcnt++;
index--;
}else if(index == sb.length()-2 && sb.charAt(index) >= sb.charAt(index+1)){
sb.deleteCharAt(index+1);
delcnt++;
index--;
}else{
index++;
}
}
answer = sb.toString();
return answer;
}
}
다시 한번 해보니 한번에 풀렸지만, 외워서 푼 느낌이다...
외워서 풀더라도 푸는 방법을 알아야 하는 건데...
아무튼 delcnt가 k가 되면 루프를 멈추는 거니까 아무리 긴 숫자여도 큰 상관은 없는것
나는 그동안 k개 지우고 난 숫자의 길이 만을 생각해서 k개씩 어떻게 지울지를 고민했었다.
그런데 그렇게 하면 숫자의 순서와 지우는 것을 어떻게 지정할지가 문제였다.
그런데 다른 분의 풀이를 보니, 두 숫자만을 비교하도록 하는 방법이었다.
❗ 두 숫자만 비교해서 뒷 숫자가 더 크면 지금의 숫자를 지우고, 또 그러니까 index를 앞으로 당긴다.
❗ 마지막까지 k개를 못 지웠을 때 끝에서 두자리를 비교하는데,
뒷자리가 더 큰 경우는 이미 앞의 조건문에서 걸렀으니까 앞의 숫자가 더 큰 경우를 생각해준다.
더 작은 애인 뒷 숫자를 지우고, 인덱스 다시 앞으로 당긴다.
❗ 모든 위의 경우들을 모두 제외했을 때(맨 끝이 아니며, 앞자리가 뒷자리보다 클 때)는 i++를 하여 다음 글자로 가도록 한다.
이번 문제에서 알게된 것은 무조건 for문을 쓰는게 답은 아니라는거
크기 비교는 2개씩 생각하는 것을 기본으로 하는것!
내일 문제는 알고리즘 그림 처럼 yes or no로 생각하면서 코드를 짜봐야지