Ayden's journal

기수radix를 바꾸는 방법에 대하여

문제 : 프로그래머스 레벨 1 - 3진법 뒤집기

 

나의 풀이

// 윽, 코드 스멜(?)
const solution = n => parseInt(n.toString(3).split("").reverse().join(""), 3);

사실 이런 식으로 코드를 짜는 건 내가 선호하는 방식은 아니다. "나는 한 줄의 코드만으로 문제를 풀 수 있다"는 걸 과시(?)하고 싶었다고 할까. 실제 코드를 저런 식으로 짜면 ─ 너무나 축약된 나머지 ─ 이게 뭐하는 코드인지 눈에 잘 들어오지 않아서 유지보수는 둘째치고 다른 사람과 협업할 때 상당히 곤란할 것이다.

const solution = (number) => {
  const convertedNumber = number.toString(3).split("").reverse().join("")
  const newNumber = parseInt(convertedNumber, 3);
  
  return newNumber
}

원래 내가 짜는 코드 스타일은 이런 식에 가깝다. 뜬금없지만 변수명 잘 붙이는 거 정말 어렵다. 난 이런 쪽에는 영 재능이 없는 듯하다.

 

기수radix를 바꾸는 방법

기수는 숫자 표현에 기준이 되는 수를 말한다. 2진법이라면 radix-2이고 16진법이라면 radix-16이 될 것이다. 이 문제는 radix-10을 radix-3로 바꿨다가 다시 radix-10으로 바꾸는 법을 알고있는지 물어보는 것과 다르지 않다. 자바스크립트에서는 Number 생성자의 toString 메소드를 사용하여 radix-10을 radix-N으로 변경하고, 글로벌 객체의 parseInt 함수를 사용하여 radix-N을 radix-10으로 변경할 수 있다.

// radix-10 to radix-N
let number = 30
let convertedNumber = number.toString(N)

// radix-N to radix-10
let newNumber = parseInt(convertedNumber, N)

 

만약 radix-N인 문자열을 radix-M인 문자열로 전환하고 싶다면 다이렉트로 변경하는 방법은 없다. 한 번은 radix-10을 통해야 한다.

// radix-3으로 30과 같음
let convertedNumber = "1010"

// radix-3 to radix-6
let newNumber = parseInt(convertedNumber, 3).toString(6) // "50"

블로그의 정보

Ayden's journal

Beard Weard Ayden

활동하기