[Swift][프로그래머스] 3진법 뒤집기 - 진법 처리

팔랑이·2024년 4월 19일
1

iOS/Swift

목록 보기
15/71
post-thumbnail

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


👇🏻 나의 풀이

import Foundation

func solution(_ n:Int) -> Int {
    return(tertodeci(ternaryrev(n)))
}

func ternaryrev(_ x: Int) -> [Int] {
    var num = x
    var trev: [Int] = []
    while true {
        trev.append(num%3)
        num = num / 3
        if num == 0 {
            return trev
        }
    }
}

func tertodeci(_ m: [Int]) -> Int{
    let tarnary = m
    let cnt: Int = m.count
    var deci: Int = 0
    for i in 1...cnt {
        deci += tarnary[i-1] * Int(pow(3.0, Double((cnt-i))))
    }
    return deci
}

풀어서 답이 맞긴 맞았는데, 다른 사람의 풀이를 보니 Swift에 진법 처리하는 이니셜라이저가 있었다.

String(radix:)

String(radix:) 이니셜라이저는 주어진 정수를 기반으로 다른 진법의 문자열 표현을 생성할 수 있게 해줍니다. 이 기능은 특히 정수를 2진수, 8진수, 16진수 또는 다른 원하는 진법의 문자열로 변환할 때 유용합니다. radix 매개변수는 목표 진법을 지정하며, 2에서 36까지의 값을 사용할 수 있습니다.

사용 예시

let decimalNumber = 255
let binaryString = String(decimalNumber, radix: 2) // "11111111"
let hexString = String(decimalNumber, radix: 16) // "ff"
let octalString = String(decimalNumber, radix: 8) // "377"

String(radix:), Int(radix:) 모두 가능하다.

👇🏻 변경된 풀이

import Foundation

func solution(_ n: Int) -> Int {
    let ternary = String(n, radix: 3)
    let reversedTernary = String(ternary.reversed())
    return Int(reversedTernary, radix: 3)!
}
profile
정체되지 않는 성장

1개의 댓글

comment-user-thumbnail
2024년 5월 4일

이거 문제 이해부터 힘들었어요 ㅋㅋ radix라는게 있군요👍🏻

답글 달기