3진법 뒤집기(Lv1. Swift)

Updated:

3진법 뒤집기(Lv1. Swift)

🔍 문제

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

🔶 제한사항

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

🔷 입출력 예

image

🔷 입축력 예 설명

입출력 예 #1

image

입출력 예 #2

image


📌 풀이

문제에서 설명해준 과정 그대로 코드로 구현하면 된다

  1. 먼저 10진법으로 바꾼 n을 3진법으로 바꿔 준다

-> String(n, radix: 3): n을 3진수로 바꾼 값을 String 으로 return

  1. 3진법으로 바꾼 수를 반전 시켜 준다 -> String(ternary.reversed()): 문자열의 순서를 반대로 바꾸어 반환해준다

  2. 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

Categories:

Updated:

Leave a comment