Programmers/Lv. 1

[Kotlin] Programmers Lv. 1 3진법 뒤집기

chattymin 2023. 9. 15. 11:49
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/68935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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
반응형