공부/코딩테스트

Q. 3진법 뒤집기

뀨뿌뀨뿌 2023. 6. 21. 15:52

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

🚫제한 사항
n은 1 이상 100,000,000 이하인 자연수입니다.

❗입출력 예

n result
45 7
125 229

😀 내가 푼 답

function solution(n) {
    return parseInt(n.toString(3).split("").reverse().join(""), 3)
}

ⅰ. 10진수 -> n진수로 진수 변환하기

  • toString()
    • toString()은 문자열을 반환하는 object의 대표적이 방법이지만 기수(radix)를 매개변수로 취할시에는 10진수를 다른 진수로 변환할 수 있음
    • 기수의 값은 최소 2부터 36까지 가능함
    • 반환되는 값은 Number가 아닌 String!!
const base_num = 10

// 10진수 -> n진수
// console.log(num.toString(n))

// 10진수 -> 3진수
console.log(base_num.toString(3))  // 101

// 10진수 -> 2진수
console.log(base_num.toString(2))  // 1010

console.log(typeof base_num.toString(3));  // string

ⅱ. n진수 -> 10진수로 진수 변환하기

  • parseInt(string, radix)
    • string
      ✔ 파싱할 값
      문자열이 아닌 경우 toString 연산을 사용해 문자열로 변환해서 사용
      문자열의 맨앞의 공백은 무시함
    • radix(optional)
      stirng의 진수를 나타내는 2부터 36까지의 정수
      Number 자료형이 아닌 경우 Number로 변환됨
    • parseInt의 매개변수에는 Number, String 모두 가능
// n진수 → 10진수
// console.log(parseInt(parameter, n))

// 2진법 -> 10진법
const binary_num = 1111
console.log(parseInt(binary_num,'2'));   // 15

// 3진법 -> 10진법
const ternary_num = "1111"
console.log(parseInt(ternary_num, 3));   // 40

😊 문제풀이 답안 OR 다른사람들 답안

function solution(n) {
    const answer = [];
    while(n !== 0) {
        answer.unshift(n % 3);
        n = Math.floor(n/3);
    }
    return answer.reduce((acc,v,i) => acc + (v * Math.pow(3, i)),0);   
}
  • unshift()
    • 배열 형태의 객체 시작점에 주어진 값을 삽입함
    • 배열 맨앞에 새로운 값을 추가하고 배열의 전체 개수를 리턴함

'공부 > 코딩테스트' 카테고리의 다른 글

Q. 같은 숫자는 싫어  (0) 2023.06.21
Q. 최소 직사각형  (0) 2023.06.21
Q. 하샤드 수  (0) 2023.06.21
Q. 콜라츠 추측  (0) 2023.06.21
Q. 제일 작은 수 제거하기  (0) 2023.06.20