코딩 테스트/프로그래머스

[Swift] 프로그래머스(lv.1) 31 - 3진법 뒤집기

말차프라푸치노 2022. 3. 11. 16:03

3진법 뒤집기

문제 설명

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

 

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

 

 

 

문제 풀이

입력받은 n을 3으로 나누며 배열에 추가해준다. 그러면 3진법의 뒤에서 부터 저장하는게 된다.

배열을 reduce 함수를 통해 3진법 int 타입으로 바꿔준다.

 

+ 이해가 잘 안될경우 10 진법으로 생각해보면 쉽다.

 

 

 

 

 

코드

내 코드

import Foundation

func solution(_ n:Int) -> Int {
    
    var num = n
    var arr:[Int] = []
    
    while(num > 0 ){
        arr.append(num % 3)
        num = num / 3
    }
    
    return arr.reduce(0) {$0 * 3 + $1}
}

 

 

 

 

다른 사람 코드

import Foundation

  func solution(_ n:Int) -> Int {
        let flipToThree = String(n,radix: 3)
        let answer = Int(String(flipToThree.reversed()),radix:3)!
        return answer
 }

String(_:radix:) 메소드를 사용했다. 이 메소드를 쓰면 쉽게 진법을 바꿀 수 있다.

Int(_:radix:) 를 바로 사용해야 할 것 같지만 첫 번째 파라미터가 String 타입이다.

이렇게 하나 더 배워간다.

 

 

 

 

후기

진법 문제가 어려우면 10진법으로 생각하자 -> 숫자만 바꿔주면 된다.

String(_:radix:) 를 사용해서 쉽게 진법을 관리할 수 있다.