항해99_10기/[2주차] 알고리즘 문제풀이
[13번][중급] 3진법 뒤집기
JN33
2022. 11. 21. 23:28
문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 답
[pseudo code - 문자열 접근]
1. parameter n에 parseInt(n, 3) -> 3진법 숫자로 변경
2. 숫자 뒤집기 -> toString -> i=num.length-1 부터 0까지 돌면서 새로운 str에 넣어주기
3. 숫자로 바꿔서 10진법으로 바꾸기
function solution(n) {
let arithmetic_3 = n.toString(3);
let converted = "";
for (let i = arithmetic_3.length - 1; i >= 0; i--) {
converted += arithmetic_3[i];
}
converted = parseInt(converted, 3);
return converted;
}
console.log(solution(45));
console.log(solution(125));
// full method 버전
function solution(n) {
return parseInt([...n.toString(3)].reverse().join(""), 3);
}
console.log(solution(45));
console.log(solution(125));
[pseudo code - 숫자 접근]
1. 3진법 숫자로 변경하여 한 자리씩 배열에 넣어 주기 (10진수의 숫자의 오른쪽 자리수부터 자리수별로 변환하고 싶은 진수로 나누어 나온 값을 적어주면 뒤집힌 숫자로 변환 됨)
2. 숫자 뒤집기
3. 10진법으로 바꾸기 (숫자의 오른쪽 끝자리부터 자리수 * 3^0 + 자리수 * 3^1... 하면 10진수로 변환 가능)
function solution(n) {
const answer = [];
while (n !== 0) {
answer.push(n % 3);
n = Math.floor(n / 3);
}
return answer.reduce((acc, val, i) => acc + v * 3 ** i);
}