알고리즘 CODEKATA 40 (3진법 뒤집기)

오리너구리·2024년 6월 17일
0

CODEKATA

목록 보기
39/57
post-thumbnail

문제 설명

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


제한사항

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

내 풀이

최종 코드

import kotlin.math.*

class Solution {
    fun solution(n: Int): Int {

        var modList = mutableListOf<Int>()
        toBaseThree(n,modList)
        var reverseModList = modList.reversed()
        var answer = toBaseTen(reverseModList)

        return answer
    }

    fun toBaseThree(number : Int, modList : MutableList<Int>){
        var num = number
         while (num > 0) {
        modList.add(num % 3)
        num /= 3
    }
    }

    fun toBaseTen(modList : List<Int>):Int{
        var answer = 0
        for(i in modList.indices){
            answer += modList[i] * 3.0.pow(i).toInt()
        }
        return answer
    }

}

풀이 과정

  1. 3진법? 3진법어떻게..어떻게만들지

    3으로 나눈 나머지를 이용하면..되는거였당

  2. n을 3진법으로 변환하는 함수를 만들고(3으로 나눈 나머지를 이용)

  3. 3진법을 다시 10진법으로 변환하는 함수를 만들어줌 (제곱을 사용해야해서 pow 함수를 사용하기위해 코틀린 매스를 임포트했음)

  4. 그리고3진법으로 만들기위해 만든 List를 뒤집어서 10진법으로 만들어주는 함수에 넣어줌(reverse() 함수 사용)


다른 사람 풀이

class Solution {
    fun solution(n: Int): Int {
        return n.toString(3).reversed().toInt(3)
    }
}

?

머임 이거 왜 되는거임? 얼탱…

toString()에서 숫자 넣으면 해당 진법 문자열로 변환해준다고함..

아무도 나한테 왜 이거 안 알려줌?

toInt() 에도 숫자 넣으면.. 해당진법을 1-진법으로 알아서 변환해서 반환하나봄..

완즈이 피자 헛수고용..

profile
오리너구리입니다

0개의 댓글