문제 설명
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
이다.
- 4에대하여 1번의 과정을 계속해보면,
3으로 나눈 나머지가 1
이므로 String 배열의1번 인덱스에 해당하는 "1"
을 문자열에 추가한다.4에서 1을 빼고 3으로 나눈 값은 1
이다.- 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();
}
}