[프로그래머스] 124 나라의 숫자 (Java)

nnm·2020년 3월 3일
1

프로그래머스 124 나라의 숫자

문제풀이

최악의 경우 n이 5억이다. 따라서 하나씩 숫자를 올려가며 하는 것은 불가하다. 숫자가 1, 2, 4 세 가지만 존재하니까 n을 3으로 나머지 연산해보자.

  • 1 % 3 = 1 (124 나라 : 1)
  • 2 % 3 = 2 (124 나라 : 2)
  • 3 % 3 = 0 (124 나라 : 4)

나머지 연산으로 나온 숫자를 인덱스로 하는 124 나라의 숫자를 나타내는 배열을 만들자

  • String numbers = {"4", "1", "2"};

그렇다면 124나라의 숫자로 두 자릿수 이상은 어떻게 할까? 바로 나누기 연산을 통해 남은 숫자를 다시 위의 과정을 거치는 것이다. 이 때 나머지 연산의 결과 인덱스는 가장 뒤쪽부터 붙여나간다.

n = 5 일 때

1) n % 3 = 2 
   n = n / 3 = 1
2) n % 3 = 1
   n = n / 3 = 0
   
답은 numbers[1] + numbers[2] = "12"

3으로 나누어 떨어지는 경우에는 다른 규칙이 하나 적용된다. 바로 n에 -1을 해주는 것이다.

구현코드

class Solution {
  public String solution(int n) {
      String[] numbers = {"4", "1", "2"};
      String answer = "";
      
      int num = n;
      
      while(num > 0){
          int remainder = num % 3;
          num /= 3;
          
          if(remainder == 0) num--;
          
          answer = numbers[remainder] + answer;
      }
      
      return answer;
  }
}
profile
그냥 개발자

1개의 댓글

comment-user-thumbnail
2021년 9월 25일

"3으로 나누어 떨어지는 경우에는 다른 규칙이 하나 적용된다. 바로 n에 -1을 해주는 것이다."
해주는 이유를 알 수 있을까요?
3으로 나누어 떨어지지 않는 경우
4,5를 예를 들면 나누기 했을 때 1이 되는데 6이면 2가 되어서 4,5와 같이 몫을 일부로 1로 만들어주는걸까요?

답글 달기