본문 바로가기

해커랭크(Problem Solving)

Beautiful Days at the Movies

문제: 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로 나누어 떨어지는 경우의 개수를 구하는 방법은 단순한 계산이므로 생략한다.

'해커랭크(Problem Solving)' 카테고리의 다른 글

The Time in Words  (0) 2019.10.20
Save the Prisoner!  (0) 2019.10.20
Encryption  (0) 2019.10.13
Picking Numbers  (0) 2019.10.02
Extra Long Factorials  (0) 2019.10.02