-
코딩테스트 연습 / 연습문제 / 124 나라의 숫자 / JAVA알고리즘/프로그래머스 2020. 4. 23. 16:35
문제 풀이
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()메소드를 이용하여 앞에다 붙여줍니다.
히스토리
'알고리즘 > 프로그래머스' 카테고리의 다른 글
코딩테스트 고득점 kit / 스택&큐 / 쇠막대기 / JAVA (0) 2020.05.02 코딩테스트 연습 / Summer/Winter Coding(~2018) / 스킬트리 / JAVA (0) 2020.04.24 코딩테스트 고득점 kit / 스택&큐 / 기능개발 / JAVA (0) 2020.04.22 코딩테스트 고득점 kit / 스택&큐 / 프린터 / JAVA (0) 2020.04.19 코딩테스트 고득점 kit / 스택&큐 / 주식가격 / JAVA (0) 2020.04.18