728x90
https://school.programmers.co.kr/learn/courses/30/lessons/68935
Code
class Solution {
fun tenToThree(num: Int): String{
// 3으로 나누고, 나머지를 배열에 저장하고 reverse하면 됨.
var temp = num
var result = mutableListOf<Int>()
while (temp != 0){
result.add(temp % 3)
temp /= 3
}
return result.reversed().joinToString("")
}
fun threeToTen(num: String): Int{
// 자릿수를 활용해서 3^0을 곱하고, 3^1을 곱하고 ... 반복
var temp: Double = 0.0
var len = num.length
for (i in 0 until len){
temp += num[len - i - 1].digitToInt() * 3.0.pow(i)
}
return temp.toInt()
}
fun solution(n: Int): Int = threeToTen(tenToThree(n).reversed())
fun solution2(n: Int): Int = n.toString(3).reversed().toInt(3)
}
10진법 숫자를 3진법으로 변환하고, 뒤집은 후, 10진법으로 다시 변환하는 문제다.
그래서 3진법 변환 함수를 만들고, 10진법 변환 함수를 만들었다.
3진법 변환 함수는 기본적으로 진법 변환과 같은 순서를 거친다.총 숫자가 0이 될때까지 원하는 숫자로 나누면서 나머지를 MutableList에 담아주고, 뒤집어 준다면 해당 진법 변환이 된다.
10진법 변환 함수도 원리상으로 똑같다.211이라는 3진법 예시 숫자가 있다고 가정하자.10진법으로 바꾸기 위해서는 각 자리수에 따라 연산을 진행해주면 된다.2 * 3^2 + 1*3^1 + 1*3^0 을 해주면 된다.
근데... toString이랑 toInt쓰면 되더라... 흑
728x90