문제의 상세내역은 링크를 참고하자.
문제는 간단해 보인다. 10진법 의 숫자를 3진법의 숫자로 바꾸는 것이다.
하지만, 문제에서 특이한 점은 0을 사용하지 않고 4를 사용한다는 것이다.
1. 문제 접근
이 나라에서는 1은 1, 2는 2, 3은 4를 가르킨다고 생각하자.
예를 통해 이해해 보자.
10진법으로 9가 주어졌다면, 3으로 나누었을 때 몫은 3, 나머지는 0이 될 것이다.
하지만, 이 말도 안되는 나라는 0을 싫어하나보다. 0을 쓰지 못한다.
나머지를 3으로 바꿔주고, 몫을 하나 줄여주자.
그렇게 되면, 우리는 몫이 2, 나머지가 3이 되게 될 것이다.
이 나라에서 2는 2, 3은 4를 의미하므로, 최종적으로 24라는 답이 나오게 되는 것이다.
2. 전체 코드
function solution(n) {
var answer = "";
const map = [0, 1, 2, 4];
function divide3(num, remainder) {
if (num <= 3) {
if (num !== 0) {
remainder = map[num] + remainder;
}
answer = remainder;
return;
}
let quotient = Math.floor(num / 3);
let adjustedRemainder = num % 3;
if (adjustedRemainder === 0) {
quotient--;
adjustedRemainder = 3;
}
divide3(quotient, map[adjustedRemainder] + remainder);
}
divide3(n, "");
return answer;
}
이렇게 효율성과 정확성을 통과했다.
하지만..........
다른 분들의 코드를 보고 살짝 현타 + 절망감이 찾아왔다ㅋㅋㅋㅋ
3. 다른 분들의 코드
const solution = n => f(n - 1);
const f = n => n < 3 ? '124'[n] : f(div(n, 3) - 1) + f(n % 3);
const div = (a, b) => parseInt(a / b);
ㅋㅋㅋㅋㅋ내가 만들었던 재귀를 저렇게 간단하게 만들 수 있다니... 충격적이었다.
더 열심히 하자
'Algorithm' 카테고리의 다른 글
[PCCP 기출문제] 2번 석유시추(lv2, js) (0) | 2023.12.28 |
---|---|
[leetcode] 258. Add Digits (feat. JS) (0) | 2023.11.03 |
[leetcode]242. Valid Anagram(feat. JS) (1) | 2023.11.02 |
[leetcode] 125. Valid Palindrome (feat. JS) (0) | 2023.11.01 |
완전탐색 - 양과 늑대(2022 KAKAO BLIND RECRUITMENT) (0) | 2022.04.08 |