3진법 뒤집기(Lv1. Swift)
Updated:
3진법 뒤집기(Lv1. Swift)
🔍 문제
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
🔶 제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
🔷 입출력 예
🔷 입축력 예 설명
입출력 예 #1
입출력 예 #2
📌 풀이
문제에서 설명해준 과정 그대로 코드로 구현하면 된다
- 먼저 10진법으로 바꾼 n을 3진법으로 바꿔 준다
-> String(n, radix: 3)
: n을 3진수로 바꾼 값을 String 으로 return
-
3진법으로 바꾼 수를 반전 시켜 준다 ->
String(ternary.reversed())
: 문자열의 순서를 반대로 바꾸어 반환해준다 -
3진수를 10진수로 반환시켜 준다 -> 0021(3진수)를 10진수로 바꾸는 식은 아래와 같다.
(0 * 3^3) + (0 * 3^2) + (2 * 3^1) + (1 * 3^0)
-> pow()메소드를 사용하여 거듭제곱을 계산해준다.
pow(3.0, 2.0)
: 3^2 거듭 제곱 계산을 해준다.
-> 반전시킨 3진법 수를 위의 방법을 통해 10진법으로 변환해주면 된다
func solution(_ n:Int) -> Int {
let ternary = String(n, radix: 3) // 10진법 n 을 3진법으로 바꿔주기
let reversed = String(ternary.reversed()) // 3진법으로 바꾼 수를 반전시켜 준다
var power = Double(reversed.count - 1) // 3진법 가리수 계산을 위해 변수를 생성해준다
var result = 0.0
for i in reversed { // reversed 반복
guard let number = Double(String(i)) else { break } // gurad 문으로 Double 로 반환해줌
result += (number * pow(3.0, power)) // 10진법으로 바꾸어 계산해주고 해당 값을 result 에 더해준다
power -= 1.0 // i 에 해당하는 지수 계산을 위해 -1dㅡㄹ 해준다
}
return Int(result) // 정답을 Int 타입으로 제출
}
print(solution(45)) // 7
Reference
프로그래머스 - https://programmers.co.kr/learn/courses/30/lessons/68935
Leave a comment