알고리즘/Programmers

[Swift_Programmes] 3진법 뒤집기

YEN_ 2023. 12. 4. 09:37

 

프로그래머스 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/68935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


💡 내가 제출한 풀이

import Foundation

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

💡 풀이 과정

  1. 주어진 n을 3진법으로 변환한다
  2. 앞뒤로 뒤집는다
  3. 다시 10진법으로 변환한다

 

진수 바꾸기

init( String 타입의 문자열, radix: 바꿀 진수 )

 

https://developer.apple.com/documentation/swift/int/init(_:radix:)

 

init(_:radix:) | Apple Developer Documentation

Creates a new integer value from the given string and radix.

developer.apple.com

 

 

2진법 <-> 10진법이라면

String( "45", radix: 2 ) -> 1200
String( "1200", radix: 2 ) -> 45

 

이 문제에서는 3진법으로 바꿔줘야 하므로 radix 값을 3으로 정해서 계산한다.

숫자로 바꿀 수 없는 문자일때 nil로 처리되기 때문에 결과값이 옵셔널로 반환된다

따라서, Int 형으로 반환할 때는 옵셔널 추출을 해주어야 한다.

n == 45

let value = String(n, radix: 3)
// 1200

let reversedValue = String(value.reversed())
// 0021

// 옵셔널 추출
let result = Int(reversedValue, radix: 3)!
// 7