코딩테스트 연습 / 연습문제 / 124 나라의 숫자 / JAVA
문제 풀이
class Solution {
public String solution(int n) {
String answer = "";
StringBuilder sb = new StringBuilder();
char[] num = {52,49,50}; //4,1,2
while(n > 0){
sb.insert(0,num[n%3]);
n = (n - 1) / 3;
}
answer = String.valueOf(sb);
return answer;
}
}
이 문제는 약간의 응용력이 들어간 문제이기 때문에 접근방법에 주의해야 합니다.
평소에 2진수 변환 같은 문제를 풀어보지 못한 사람은 잘 생각하지 않으면 어려울 수도 있는 문제입니다.
저 같은 경우에는 처음에 n을 log로 나누려고 했는데 Math.log3()이 자바에서 없다는것을 깨달았습니다.(나중에 여유가 된다면 등차수열을 공부좀 해봐야될것 같습니다.)
이 문제의 핵심은 1,2,4가 아닙니다.
만약 첫째자리를 1, 2, 4중 만들고 두번째 자리가 오면 append를 해야지 하는 생각을 하시면 문제가 조금 어려워집니다.
이 문제의 핵심은 3입니다.
10진수를 2진수로 변환할때처럼 n이 0이 될때까지 계속 3으로 나눠서 자릿수를 먼저 구하는 것이 핵심입니다.
자릿수를 구하면 각 자리수에 맞게 1,2,4를 치환해주시면 됩니다.
위의 코드를 보시면 52, 49, 50은 각각 4, 1, 2의 아스키코드입니다.
52를 앞으로 먼저 놔둔 이유는 n = 3이라고 가정했을때 n % 3은 0이 되므로 좀 더 식이 간편해집니다.
대신 증감식은 (n-1) / 3 으로 해야합니다. n이 3이라고 가정했을때 증감식에 의해 1이 되므로 while문을 한번 더 돌게 되기 때문입니다.
그리고 진법변환시 나머지값은 앞에서부터 나오므로 StringBuilder의 insert()메소드를 이용하여 앞에다 붙여줍니다.
히스토리
chucoding/algorithm
알고리즘 문제풀이 사이트 도전~!! . Contribute to chucoding/algorithm development by creating an account on GitHub.
github.com