[프로그래머스] 124 나라의 숫자 (java) Number_Change
2020-01-13
124 나라의 숫자 (programers > lev2 > Number_Change)
문제설명
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은 500,000,000이하의 자연수 입니다.
입출력 예
n | result |
---|---|
1 | 1 |
2 | 2 |
3 | 4 |
4 | 11 |
풀이
static public String solution(int n) {
String answer = "";
int rest = 0;
while(n>0) {
//rest가 0일때랑 아닐때랑 구분해서 문제를 해결한다.
rest = n%3;
n = n/3;
//어차피 나머지는 무조건 0,1,2 중 하나다
if(rest==0) {
rest = 4; // 밑에서 더해줄거니까 4로 바꿔주고
n = n-1; // 몫은 3%3 6%3 9%3 구간 등 때 필요 -> 자리올림을 안하는 효과!
}
answer = rest + answer;
}
return answer;
}
후기
처음에는 rest 와 quotient로 나눠 생각하고 rest==0, rest==1, rest==2 이런식으로 생각했더니 if문이 길어지고 꼬였다.
rest로만 문제를 해결한다는 생각이 잘 떠오르지 않았다!
while을 돌 때마다 나오는 rest는 어차피 답의 끝부분에 해당되고, rest==0일 때 (자리올림을 안하는 효과)처리해주는 것만 생각하면 됐었다.
- 처음 생각 했던 방식
static public String solution(int n) {
String answer = "";
while(true) {
int q = n/3;
int r = n%3;
//몫이 3보다 크면 계속 해줌
->설정 오류 3보다 큰 게 아니고 0보다 클때 나오는 나머지를 계속 + 해줘야 함
if(q>3)
n=q;
else{
->이 부분에서 r==0이면 4로 바꿔주고 n-1 로 고쳤어야 했다.
if(r==0) {
if(q==2)
answer = "1" + answer;
else if(q==3)
answer = "2" + answer;
}
else {
if(q==1)
answer = "1" + answer;
else if(q==2)
answer = "2" + answer;
else if(q==3)
answer = "4" + answer;
} -> 이부분은 answer = r + answer;로 바꿀 수 있었다.
break;
}
}
return answer;
}
tip
- /와 % 쓰는 문제가 아직 익숙치 않은데 반복되는 부분이 뭐였는지 생각해서 변수를 잘 설정해야 하겠다…
- 전에 풀 때는 거의 이해도 못했었는데 오늘은 그래도 3으로 나누고 그 나머지와 몫으로 해결한다는 것까지는 생각해냈다!