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

2024. 5. 5. 12:12TIL

신나는 주말!

주말에는 간단한 알고리즘 문제를 풀어보자!

 

🔥알고리즘 문제

 

문제설명

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

제한사항

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

입출력 예

n result
45 7
125 229

입출력 예 설명

입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.

 

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
45 1200 0021 7
  • 따라서 7을 return 해야 합니다.

입출력 예 #2

  • 답을 도출하는 과정은 다음과 같습니다.

 

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
125 11122 22111 229
  • 따라서 229를 return 해야 합니다

 

내가 작성한 코드 

import kotlin.math.pow
class Solution {
    fun solution(n: Int): Int {
    var result = ""
    var answer = 0.0
    var number = n
    while (number > 0) {
        val remainder = number % 3
        result = remainder.toString() + result
        number /= 3
    }

    for (i in 0..result.length-1) {
        val digit = result[i].toString().toInt() 
        answer += digit.toDouble() * 3.0.pow(i.toDouble()) 
    }

    return answer.toInt()
}
}

 

내가 작성한 코드 해석

val remainder = number % 3
result = remainder.toString() + result number /= 3 
10진수 수를 3수로 바꾼후 값들을 거꾸로 저장

for (i in 0..result.length-1) {
val digit = result[i].toString().toInt()
answer += digit.toDouble() * 3.0.pow(i.toDouble())
}
거꾸로 바뀐 값을 다시 10진수로 바꾸기 위해서 각 자리수에 3의 제곱수를 곱함 


 

다른사람은 어떻게 했을까?

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

 

다른 사람들이 작성한 코드 해석

toString(3)을 이용하여 3진법수로 바로 바꿔주고 reversed()로 뒤집은 후 toInt(3)를 이용하여 3진법인 수를 다시 10진법인 수로 변환한다

return n.toString(3).reversed().toInt(3)

 

이걸 이렇게 쉽게????

 

 

알게 된 Point

toString()과 toInt() 안에 값을 넣어줌으로서 n진수로 변환할수있다

toString(n) : 10진법 수를 n진법의 문자열로 변환

toInt(n): n진법 수를 10진법 수로 변환

 

 알고리즘 GitHub : https://github.com/kotlin2024/algorithm/commit/2cd43c53ce089a6e63c6453a4053ea9bb963510f

 

'TIL' 카테고리의 다른 글

Spring이란  (0) 2024.05.07
데이터 타입 런타임 에러  (0) 2024.05.06
(알고리즘) 최대공약수와 최소공배수 구하기  (0) 2024.05.04
공간 복잡도  (0) 2024.05.03
시간 복잡도  (0) 2024.05.02