n을 3진법 상에서 앞뒤로 뒤집는다는게
자연수 n 을 3진법으로 바꾼 뒤 뒤집는 거겠지?
예로 나온 45의 경우
45 -> 1200 -> 0021 -> 7
3진법 변환 -> 뒤집음 -> 10진법 변환
와 하나도 모르겠다 .!
n을 3으로 나눈 나머지를 n 이 0보다 작아질때까지 문자열에 차례대로 넣어서 앞뒤 반전된 3진법을 만들고
var answer: Int = 0
var x = n
var y: String = ""
while(x >0) {
y += (x %3).toString()
x /=3
}
=> 0021
이 문자열의 길이를 토대로 10진법으로 바꿔야하는데
reversed() 로 뒤집어서
=> 1200
0번째 숫자 1은 3의 0승 * 1
1번째 숫자 2는 3의 1승 * 2
import kotlin.math.*
class Solution {
fun solution(n: Int): Int {
var answer: Int = 0
var x = n
var y: String = ""
while(x >0) {
y += (x %3).toString()
x /=3
}
answer =
y.reversed().foldIndexed(0){i, acc, num -> acc + (i.toDouble().pow(3).toInt() *num.toInt()) }
return answer
}
}
왜 결괏값이 이렇게 됐는지 모르겠다....내일 다시풀기
자꾸 결괏값이 1730이 나와서 포기...ㅜㅜ
다른 사람 풀이
class Solution {
fun solution(n: Int): Int {
return n.toString(3).reversed().toInt(3)
}
}
...너무 간단해서 당황스럽다
형변환할 때 괄호에 숫자를 넣어서 몇진법으로 바로 바꿔준다고 한다.
toString(n)
: n진법으로 만들어줌
toInt(n)
: n진법을 10진법으로 만들어줌
10진법을 n진법으로 변환하고 싶다 ! => .toString(n)
n진법을 10진법으로 변환하고 싶다 ! => .toInt(n)
'코딩테스트' 카테고리의 다른 글
프로그래머스 | 최대공약수와 최대공배수 | Kotlin | 다시풀기 (1) | 2024.01.24 |
---|---|
프로그래머스 | 제일 작은 수 제거하기 | Kotlin (1) | 2024.01.23 |
프로그래머스 | 이상한 문자 만들기 | Kotlin | 다시풀기 (0) | 2024.01.18 |
프로그래머스 | 행렬의 덧셈 | Kotlin | 다시풀기++ (0) | 2024.01.16 |
프로그래머스 | 직사각형 별찍기 | Kotlin (1) | 2024.01.11 |