안녕하세요. 개발 중인 정주입니다.
오늘은 프로그래머스 - 3진법 뒤집기 문제를 풀었습니다.
목차
Github
GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘
스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub.
github.com
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/68935
코딩테스트 연습 - 3진법 뒤집기
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수
programmers.co.kr
풀이
3진법을 정석대로 구해서 문제를 통과했는데요.
Swift의 놀라운 진법 처리 방식이 있더라고요.
바로 String에서 radix 인자를 통해 진법 변환을 해준다는 겁니다.
let flipToThree = String(1000, radix: 3)
위 코드처럼 작성하면 1000을 3진수로 변환해주는 것이죠.
String으로 변환하는 것이기 때문에 타입은 당연히 String입니다.
이를 뒤집어서 다시 진법 변환을 한 뒤 Int로 변환하면 됩니다.
추가로 3진법에 관한 기사도 찾을 수 있었습니다.
참고하면 좋을 것 같아 공유합니다.
[한 토막 과학상식]AI와 자율주행의 시대, 왜 ‘3진법 반도체’ 필요할까
Pixabay 제공국내 연구진이 기존의 2진법 대신 3진법 연산을 하는 차세대 반도체 기술을 개발했다. 강주훈 성균관대 신소재공학과 교수는 조정호 연세대 화공생명공학부 교수와 공동으로 ‘3진법
www.dongascience.com:443
전체 코드
import Foundation
func solution(_ n:Int) -> Int {
let flipToThree = String(n, radix: 3) //holy...
let result: Int = Int(String(flipToThree.reversed()), radix: 3)!
//반복문 풀이
// var arr: [Int] = []
//
// var number = n
// while number != 0 {
// arr.append(number % 3)
// number /= 3
// }
//
// (0..<arr.count).forEach {
// let powNum = Int(pow(3.0, Double($0)))
// result += (powNum * arr[arr.count - 1 - $0])
// }
return result
}
let n = 45
print(solution(n))
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.