해커랭크(Problem Solving)

Beautiful Days at the Movies

감전우 2019. 10. 13. 20:58

문제: Beautiful Days at the Movies

난이도: Easy

 

문제 설명

 어떠한 두 정수 i, j와 나누는 수 k가 주어졌을 때, i부터 j까지 각각의 수를 뒤집고 그 뒤집은 수와의 차를 k로 나눠서 나누어 떨어지는 경우가 몇 가지인지를 구하라.

 예를 들어 20, 23, 6이 주어졌을 경우, 20, 22는 뒤집은 수와의 차를 6으로 나누었을 때 나누어 떨어지지만 21, 23은 나누어 떨어지지 않는다.

 

문제 해결

소스 코드

    static int beautifulDays(int i, int j, int k) {

        String toStr = null;

        String revStr = null;

        StringBuffer temp = null;

        int revInt = 0;

        int cnt = 0;

        char num = '0';

 

        for(; i <= j; i++) {

            toStr = Integer.toString(i);

            temp = new StringBuffer(toStr);

            temp.reverse();

            revStr = temp.toString();

            for(int b = 0; b < revStr.length(); b++) {

                num = revStr.charAt(revStr.length() - b - 1);

                revInt += Character.getNumericValue(num) * Math.pow(10, b);

            }

            if((i - revInt) % k == 0) {

                cnt++;

            }

           

            revInt = 0;

        }

       

        return cnt;

    }

해설

 수를 뒤집는다는 개념은 인간이 머릿속으로 생각해내기엔 매우 쉬운 일이지만 이를 소스코드에 구현하려면 고려해야 할 부분이 여럿 있다.

 수를 뒤집는 방법은 수를 문자열로 바꾸고 StringBufferreverse메소드를 이용해 뒤집는 방법을 사용했다. 그 후 뒤집은 수를 일의 자리부터 10의 거듭제곱을 곱하고 더하는 방법을 사용해 뒤집은 수를 다시 정수로 변환하였다.

 둘의 차가 k로 나누어 떨어지는 경우의 개수를 구하는 방법은 단순한 계산이므로 생략한다.