124 나라의 숫자
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. - 124 나라에는 자연수만 존재합니다. - 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다. 예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
10진법 124나라 10진법 124나라 1 1 6 14 2 2 7 21 3 4 8 22 4 11 9 24 5 12 10 41 자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요. 제한사항 - n은 50,000,000이하의 자연수 입니다.
아이디어
3진법이되, 나머지가 0인 경우는 4를 추가하면 되지 않을까?
모듈로 연산과 나누기를 이용해서 진법 게산을 하면 될 것으로 보인다.
class OddDecimalSystem {
@Nested
class TestCases {
@Test
public void case1 () {
int n = 1;
String result = "1";
Assertions.assertEquals(result, solution(n));
}
@Test
public void case2 () {
int n = 2;
String result = "2";
Assertions.assertEquals(result, solution(n));
}
@Test
public void case3 () {
int n = 3;
String result = "4";
Assertions.assertEquals(result, solution(n));
}
@Test
public void case4 () {
int n = 4;
String result = "11";
Assertions.assertEquals(result, solution(n));
}
@Test
public void case5 () {
int n = 10;
String result = "41";
Assertions.assertEquals(result, solution(n));
}
@Test
public void case6 () {
int n = 13;
String result = "111";
Assertions.assertEquals(result, solution(n));
}
@Test
public void case7 () {
int n = 16;
String result = "121";
Assertions.assertEquals(result, solution(n));
}
@Test
public void case8 () {
int n = 19;
String result = "141";
Assertions.assertEquals(result, solution(n));
}
@Test
public void case9 () {
int n = 20;
String result = "142";
Assertions.assertEquals(result, solution(n));
}
@Test
public void case10 () {
int n = 21;
String result = "144";
Assertions.assertEquals(result, solution(n));
}
}
public String solution(int n) {
/**
* 1 : 1 (3*0 + 1)
* 2 : 2 (3*0 + 2)
* 3 : 4 (3*1 + 0)
*
* 4 : 11 (3*1 + 1)
* 5 : 12 (3*1 + 2)
* 6 : 14 (3*2 + 0)
*
* 7 : 21 (3*2 + 1)
* 8 : 22 (3*2 + 2)
* 9 : 24 (3*3 + 0)
*
* 10 : 41 (3*3 + 1)
* 11 : 42 (3*3 + 2)
* 12 : 44 (3*4 + 0)
*
*
* 13 : 111 (3*4 + 1)
* 14 : 112 (3*4 + 2)
* 15 : 114 (3*5 + 0)
*
* 16 : 121 (3*5 + 1)
* 17 : 122 (3*5 + 2)
* 18 : 124 (3*6 + 0)
*
* 19 : 141 (3*6 + 1)
* 20 : 142 (3*6 + 2)
* 21 : 144 (3*7 + 0)
*/
int number = n;
StringBuffer buffer = new StringBuffer();
while ( true ) {
if ( number == 0 ) break;
int div = number / 3;
int modulo = number % 3;
if (modulo == 0 ) {
buffer.append(4);
number = div - 1;
}
else {
buffer.append(modulo);
number = div;
}
}
return buffer.reverse().toString();
}
}