(알고리즘) 3진법 뒤집기
2024. 5. 5. 12:12ㆍTIL
신나는 주말!
주말에는 간단한 알고리즘 문제를 풀어보자!
🔥알고리즘 문제
문제설명
자연수 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 |