Algorithm 뽀개기

<COS Pro 1급 Java> [1차 #4번 문제] 타임머신

딸기케잌🍓 2023. 9. 28. 01:45

문제1 (구름 에듀에서 4번문제)

어느 누군가가 타임머신을 타고 과거로 가서 숫자 0이 없는 수 체계를 전파했습니다.
역사가 바뀌어 이제 사람들의 의식 속엔 0이란 숫자가 사라졌습니다.
따라서, 현재의 수 체계는 1, 2, 3, ..., 8, 9, 11, 12, ...와 같이 0이 없게 바뀌었습니다.
0을 포함하지 않은 자연수 num이 매개변수로 주어질 때, 이 수에 1을 더한 수를 return 하도록 solution 메소드를 완성해주세요.


매개변수 설명
    자연수 num이 solution 메소드의 매개변수로 주어집니다.
    * num은 1 이상 999,999,999,999,999,999 이하의 0을 포함하지 않는 자연수입니다.

return 값 설명
    자연수 num에 1을 더한 수를 return 해주세요.

예시
    | num     | return  |
    |---------|---------|
    | 9949999 | 9951111 |
예시 설명
    9,949,999에 1을 더하면 9,950,000이지만 0은 존재하지 않으므로 9,951,111이 됩니다.

내 풀이

    public long solution(long num) {

        long answer = num + 1;
        String str = Long.toString(answer);
        for(int i = 0; i< str.length(); i++){
            if(str.charAt(i) == '0'){
                str = str.substring(0, i) + '1' + str.substring(i+1);
            }
        }
        return Long.parseLong(str);
    }

예시 설명에서 '9,950,000이지만 0은 존재하지 않으므로 9,951,111이 됩니다.' 라는 문구를 보고 숫자 0을 1로 바꿔주면 되겠다고 생각했다.

다른 사람 풀이

    public long solution(long num) {
        num += 1;
        String str = String.valueOf(num);
        str = str.replaceAll("0", "1");
        long answer = Long.parseLong(str);
        return answer;
    }

YBM 풀이

    public long solution(long num) {
        num++; //1을 더해준다
        long digit = 1;
        while (num / digit % 10 == 0) { // 이 반복문은 num에 0이 없을때까지 반복된다.
            num += digit;
            digit *= 10;
        }
        return num;
    }

num / digit에서 digit의 자릿수만큼 num의 1의 자릿수부터 버려진다고 보면된다
digit 1일 때 num / digit = 9950000
digit 10일 때 num / digit = 995000
digit 100일 때 num / digit = 99500
...