문제

1,2,4 세 개의 숫자만 쓰는 124나라가 있습니다.

124나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

  • 10진법의 1 → 1
  • 10진법의 2 → 2
  • 10진법의 3 → 4
  • 10진법의 4 → 11
  • 10진법의 5 → 12
  • 10진법의 6 → 14
  • 10진법의 7 → 21

10진법의 수 N이 입력될 때, 124나라에서 쓰는 숫자로 변환하여 반환해주는 change124 함수를 완성해 보세요. 예를 들어 N = 10이면 “41”를 반환해주면 됩니다.

리턴 타입은 문자열입니다.

풀이 1

class OneTwoFour {
    public String change124(int n) {
        String answer = "";
        int rmd;

        while(n>0){
            rmd = n%3;
            n = n/3;

            if(rmd == 0){
                n -= 1;
                rmd = 4;
            }

            answer = rmd + answer;
        }

        return answer;
    }

    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        OneTwoFour oneTwoFour = new OneTwoFour();
        System.out.println(oneTwoFour.change124(10));
    }
}

레벨5 문제인데 레벨4보다 쉬웠던 것 같다. 언뜻 보기에 3으로 나누고 그 나머지와 몫을 이용하여 푸는 문제 같아서 직접 10까지 1,2,4로 이루어진 숫자를 구해보았다.

루프가 돌 때마다 나머지(rmd)가 하나씩 더해져서 정답이 완성된다. 10을 예로 들자면, 처음 루프돌 때 나머지가 “1”이 나오게 된다. 두번째 루프에서는 “0”이 나온다. 이 문제에서는 “0”이 “4”로 대체되어 나왔다고 생각하면 쉽게 풀리는 문제인 듯 하다.

나처럼 머릿속으로 이해가 잘 되지 않는 사람들은 직접 일정 수까지의 1,2,4 숫자를 써가며 구해보고 눈으로 확인하면서 풀면 쉽게 풀 수 있을거라 생각된다.