"숫자 n을 받았을 경우 124나라의 법에 따라 3의 배수이면 몫-1
을 숫자 앞에 쓰고 아닐 경우에는 그냥 몫
을 써준다. 나머지
가 0일 경우에는 124나라의 법에 따라 뒷자리에 4를 붙이고 그 이외의 숫자인 1과 2는 그대로 숫자 뒤에 붙여주면 된다." 라고 생각했는데 문제를 잘못읽었다. 124나라에서는 1,2,4만 써야한다.
생각해보니 그냥 반복문 돌리면서 나머지를 문자열에 추가해주면 된다는 것을 깨달았다. 여기서 숫자를 나누어 줄 때 3의 배수로 나누어 떨어지는 경우가 있는데 이 경우에는 나머지가 0이므로 문자열에 0대신 4를 추가해준다. 또한 나머지로 떨어진 경우 다음에 오는 수의 나머지는 1을 빼준 형태로 문자열에 추가해주어야 하므로 조건문으로 통해 나머지가 0일 경우 1을 빼준뒤에 문자열에 추가해준다.
public class Solution {
public static String solution(int n) {
int quotient = n/3;
int remainder = n%3;
return String.valueOf(
remainder==0 ? (quotient-1==0 ? "": (quotient)-1) : (quotient==0 ? "": quotient)) +
String.valueOf(remainder==0? 4:remainder);
}
}
문제를 잘못 읽고 코드를 짧게 쓸 수 있을거 같아 객기를 부린 코드다. 문제를 잘못 읽고 풀어서 정확성과 효율성 모두 실패했다.
public static String solution(int n){
StringBuilder sb = new StringBuilder();
int remainder;
while(n>0){
remainder = n%3;
n /= 3;
// 3의 배수로 나누어 떨어질 경우 다음에 나눠주어야 하는 값의 나머지는 -1이므로 미리 1을 뺌
if(remainder == 0) n--;
sb.insert(0, remainder==0?4:remainder);
}
return sb.toString();
}