LV2. 124 나라의 숫자

강창민·2022년 5월 16일
0

프로그래머스

목록 보기
13/26

문제 설명

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.

  • 124 나라에는 자연수만 존재합니다.
  • 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

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

자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.

제한사항
n은 500,000,000이하의 자연수 입니다.


입출력 예


나의 풀이

너무나도 지극히 구현 문제였다.
주어진 예시를 보고 우선, 규칙을 잘 파악해야한다.

  • 1~6까지를 예로 들어보자, 각각의 수를 3으로 나눈 나머지가 0일때는 끝자리가 '4', 1일때는 끝자리가 '1', 2일때는 끝자리가 '2'이다. 이를 통해 String 배열 {"4", "1", "2"}를 선언하였다.
  • 그다음, 자리수가 늘어나는 경우를 생각해보자.
  • 첫 번째로, 3으로 나눈 몫이 각각 1, 2, 3일 경우를 생각해보자 뭔가 숫자를 3개씩 끊어서 규칙을 구하고 싶었지만 6과 7를 예로 들어서 3으로 나눈 몫은 둘 다 2이다. 하지만 앞자리 숫자는 1과 2로 다르다. 그래서 해당 숫자에서 1을 뺀 값을 3으로 나눈 몫을 이용했는데, 숫자가 3개씩 예쁘게 끊어졌다.
  • 이제 나눈 몫을 가지고 또 3으로 나눈 나머지n이 0보다 큰 경우에 한해서 반복적으로 수행하면 구하고자 하는 124나라의 숫자가 나온다.
  • 예를 들어, 15에 대하여 수행해보자
    1. 3으로 나눈 나머지는 0 이므로 "4"를 문자열에 추가한다 15에서 1을 빼고 3으로 나눈 값은 4이다.
    1. 4에대하여 1번의 과정을 계속해보면, 3으로 나눈 나머지가 1이므로 String 배열의 1번 인덱스에 해당하는 "1"을 문자열에 추가한다. 4에서 1을 빼고 3으로 나눈 값은 1이다.
    2. 1에 대하여 3으로 나눈 나머지는 1이므로 1번 인덱스 "1"을 추가한다. 이 때 1을 뺀 값은 0이므로 해당 수행을 종료한다.

마지막에 문자열의 순서를 거꾸로하여 return해주어야 한다!!!

import java.util.*;

class Solution {
    StringBuffer sb = new StringBuffer();
    
    String [] temp = {"4", "1", "2"};
    public String solution(int n) {
        String answer = "";
        while(n>0){
            int t = n%3;
            if(t==0){
                sb.append(temp[0]);
            }
            else{
                sb.append(temp[t]);
            }
            n = n-1;
            n = n/3;
        }
        
        
        
        return sb.reverse().toString();
    }
}
profile
오늘 그것을 할 수 없다면, 대체 무슨 근거로 내일 그것을 할 수 있다고 생각하는가?

0개의 댓글