수료한지 몇 일 안되었지만 공부는 꾸준히 하고 있다.
매일 코딩테스트 문제를 한 개씩 풀고 있다. 오늘도 프로그래머스에서 문제 한개를 풀었는데 내가 생각했던 풀이를 적어놓으면 좋을 것 같다.
[문제]
124 나라의 숫자
예를들어, 4를 124 나라의 숫자로 변환한다면, 4를 3으로 나누었을 때 몫이 1, 나머지가 1이다 몫을 3으로 나누었을 때 몫이 0, 나머지가 1이다. 나머지를 모두 합친 후가 124 나라의 숫자이다. => 11
예를들어, 3을 124 나라의 숫자로 변환한다면, 14가 나오는데 입출력 예시에는 4로 되어있다. 6의 경우도 마찬가지이다. 24가 나오는데 입출력 예시에는 14로 되어있다. 9의 경우도 마찬가지이다.
=> 모두 숫자가 한 단계씩 크게 나왔다.
=> 이를 해결하기 위해서 몫을 3으로 나누어줄 때 1을 빼주어서 나눈다.
(이 규칙을 알아내는 데 정말 오래 걸렸다...)
[풀이]
function solution(n) { var answer = ''; let rest = 0; while(n > 0) { //몫이 0이 되면 종료 rest = n % 3; //3으로 나눈다 n = Math.floor(n / 3); if(rest === 0) { //3의 배수라면 n -= 1; //1을 뺀다. (한 단계 크게 나오는 것을 방지하기 위해) restNum = 4; } answer = restNum + answer; } return answer; }
[다른 사람의 풀이]
function solution(n) { var src = [4,1,2]; //나머지를 저장해둔다. var result = ''; while(n) { result = src[n%3] + result; n = Math.floor((n-1)/3); } return result; }
나와 같은 방식으로 풀었지만 줄일 수 있는 부분은 줄여서 코드가 훨씬 깔끔해졌다.