큰 수 만들기

Inhyeeee·2021년 1월 11일
0

코딩 삽질 기록

목록 보기
17/20

이번에는 풀이부터 먼저 봤다.(뭔가 진 느낌 ㅠㅠㅠㅠ)

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로 생각하면서 코드를 짜봐야지

profile
avocadoxxi

0개의 댓글