반응형
https://programmers.co.kr/learn/courses/30/lessons/12899
나의 풀이
function solution(n) {
const answer = [];
while (n > 3) {
if (!(n % 3)) {
n = parseInt(n / 3) - 1;
answer.push(4);
continue;
}
answer.push(n % 3);
n = parseInt(n / 3);
}
answer.push(n === 3 ? 4 : n);
return answer.reverse().join("");
}
재귀함수를 사용하고 싶었는데 도저히 짤 수가 없었다..
문제 규칙상 124만 사용할 수 있지만 3진법으로 변환하였다.
3으로 나누어 떨어지는 경우 나머지를 3으로 만들고 몫을 구하였고 3 또는 1이 남을 때까지 나누었다.
그 후에 나머지 3은 4로 변환,
나머지는 그대로 answer배열에 push한 뒤에 순서가 뒤집혔으므로 reverse하였고 join으로 문자열로 변환하여 반환했다.
다른 사람의 풀이
function change124(n) {
return n === 0 ? '' : change124(parseInt((n - 1) / 3)) + [1, 2, 4][(n - 1) % 3];
}
원리는 비슷하지만 재귀 함수를 이렇게 멋있게 사용하셨다.
다음엔 의도적으로라도 쓰고야말겠다..
반응형
'IT > Algorithm' 카테고리의 다른 글
프로그래머스) 구명보트 (0) | 2021.11.23 |
---|---|
프로그래머스) 큰 수 만들기 (0) | 2021.11.21 |
프로그래머스) 멀쩡한 사각형 (0) | 2021.10.28 |
프로그래머스) 문자열 압축 (0) | 2021.10.28 |
프로그래머스) 최대공약수와 최소공배수 (0) | 2021.10.27 |