반응형
Level 1 월간 코드 챌린지 시즌 1
3진법 뒤집기
문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예시
print(solution(45)) //7
print(solution(125)) //229
내 답안
import Foundation
func solution(_ n:Int) -> Int {
return Int(String(String(n, radix: 3).reversed()), radix: 3)!
}
풀이
func solution(_ n:Int) -> Int {
//3진법 변환
let binary = String(n, radix: 3)
//거꾸로 뒤집기
let reversed = String(binary.reversed())
//10진법 변환
let decimal = Int(reversed, radix: 3)!
return decimal
}
radix 이용해서 진수 변환하는 법만 알면 간단하게 풀수 있는 문제더라.
진수 변환 참고 : https://hongssup.tistory.com/295
진수 변환 radix 안쓰고 풀면 다음과 같이 pow를 이용해 풀 수도 있다.
import Foundation
print(solution(45)) //7
print(solution(125)) //229
func solution(_ n:Int) -> Int {
var decimal = n
var binary = [Int]()
while decimal > 0 {
binary.append(decimal % 3)
decimal /= 3
}
print(binary)
binary = binary.reversed()
var result = 0
for i in 0..<binary.count {
result += Int(pow(3.0, Float(i))) * binary[i]
}
return result
}
* 주의 : pow 결과값을 Int로 반환하고 싶으면 인자를 Float이나 Double 같은 소수점으로 설정해주어야 한다.
안그러면 다음과 같은 에러가 난다.
Initializer 'init(_:)' requires that 'Decimal' conform to 'BinaryInteger'
728x90
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Swift 알고리즘] Programmers 키패드 누르기 (0) | 2022.02.15 |
---|---|
[Swift 알고리즘] Programmers 실패율 (0) | 2022.02.10 |
[Swift 알고리즘] 신규 아이디 추천 (0) | 2022.02.05 |
[Swift 알고리즘] Programmers 내적 (0) | 2022.02.04 |
[Swift 알고리즘] Programmers 예산 (0) | 2022.02.04 |