코딩테스트

[Swift 알고리즘] 프로그래머스(Lv.1) - 3진법 뒤집기

유정주 2022. 2. 25. 15:45
반응형

안녕하세요. 개발 중인 정주입니다.

 

오늘은 프로그래머스 - 3진법 뒤집기 문제를 풀었습니다.

 


목차


    Github

     

    GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘

    스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub.

    github.com

     

    문제 링크

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

     

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

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

    programmers.co.kr

     


    풀이

    3진법을 정석대로 구해서 문제를 통과했는데요.

    Swift의 놀라운 진법 처리 방식이 있더라고요.

    바로 String에서 radix 인자를 통해 진법 변환을 해준다는 겁니다.

     

    let flipToThree = String(1000, radix: 3)

    위 코드처럼 작성하면 1000을 3진수로 변환해주는 것이죠.

    String으로 변환하는 것이기 때문에 타입은 당연히 String입니다.

    이를 뒤집어서 다시 진법 변환을 한 뒤 Int로 변환하면 됩니다.

     

    추가로 3진법에 관한 기사도 찾을 수 있었습니다.

    참고하면 좋을 것 같아 공유합니다.

     

    [한 토막 과학상식]AI와 자율주행의 시대, 왜 ‘3진법 반도체’ 필요할까

    Pixabay 제공국내 연구진이 기존의 2진법 대신 3진법 연산을 하는 차세대 반도체 기술을 개발했다. 강주훈 성균관대 신소재공학과 교수는 조정호 연세대 화공생명공학부 교수와 공동으로 ‘3진법

    www.dongascience.com:443

     

     


    전체 코드

    import Foundation
    
    func solution(_ n:Int) -> Int {
        let flipToThree = String(n, radix: 3) //holy...
        let result: Int = Int(String(flipToThree.reversed()), radix: 3)!
        
        //반복문 풀이
    //    var arr: [Int] = []
    //
    //    var number = n
    //    while number != 0 {
    //        arr.append(number % 3)
    //        number /= 3
    //    }
    //
    //    (0..<arr.count).forEach {
    //        let powNum = Int(pow(3.0, Double($0)))
    //        result += (powNum * arr[arr.count - 1 - $0])
    //    }
        
        return result
    }
    
    let n = 45
    print(solution(n))

    아직은 초보 개발자입니다.

    더 효율적인 코드 훈수 환영합니다!

    공감 댓글 부탁드립니다.

     

     

    반응형