알고리즘/프로그래머스

프로그래머스 - 3진법 뒤집기

leeyuno 2021. 1. 13. 17:44

programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

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

programmers.co.kr


처음 문제를 푼 방법은 단순히 입력 받은 숫자를 3진법으로 변환 그 후에 역순으로 정렬하고 다시 10진법으로 변환 하는 방법으로 풀었다.

 

func solution(_ n:Int) -> Int {
    var number = n

    var string = ""

    var array = [Int]()

    while number >= 3 {
        array.insert(number % 3, at: array.count)
        string.insert(contentsOf: String(number % 3), at: string.endIndex)
        number = number / 3
    }

    array.insert(number, at: array.count)

    var result = 0
    for i in (0 ... array.count - 1).reversed() {
        result += NSDecimalNumber(decimal: pow(3, i)).intValue * array[array.count - 1 - i]
    }
    
    return result
}

 

후에 검색을 통해 진법 계산을 하는 방법을 찾은 후에 다시 푼 방법

 

func solution(_ n:Int) -> Int {
    let decial = String(n, radix: 3)

    let result = Int(String(decial.reversed()), radix: 3)!
    
    return result
}