문제
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
문제 풀이
1. 주어진 n을 num에 복사하고 3진법으로 바꾼 값을 저장하기 위한 문자열을 생성한다.
var num = n
var threeChange = ""
2. num이 2보다 클 때만 while문을 실행한다.
num을 3으로 나눈 나머지를 threeChange에 더하고 num에는 3을 나눈 몫을 담는다.
⭐ 주의할 점 ⭐
3진법이기 때문에 나머지가 2 이하이면 멈춰야한다.
나는 처음에 num != 1로 했다가 무한 루프를 돌았다.
while(num > 2){
threeChange += num % 3
num /= 3
}
3. while문을 빠져나왔을 때 마지막 num 값을 더하지 못 했기 때문에 num을 더한다.
threeChange += num
4. 현재 3진법으로 바뀐 문자열을 역순하고 문자 배열로 만든다.
var threeBinArr = threeChange.reversed().toCharArray()
5. 문자 배열을 반복하며 3진법을 10진법으로 변환한다.
var sqrt = 0
for(i in threeBinArr){
answer += (i-'0') * 3.0.pow(sqrt++).toInt()
}
sqrt를 증가시키는 이유는 아래와 같이 3의 배수만큼 증가시켜야하기 때문이다.
코드
import kotlin.math.pow
class Solution {
fun solution(n: Int): Int {
var answer: Int = 0
var num = n
var threeChange = ""
while(num > 2){
threeChange += num % 3
num /= 3
}
threeChange += num
var threeBinArr = threeChange.reversed().toCharArray()
println(threeBinArr)
var sqrt = 0
for(i in threeBinArr){
answer += (i-'0') * 3.0.pow(sqrt++).toInt()
}
return answer
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/68935
'Algorithm > kotlin' 카테고리의 다른 글
[프로그래머스/Kotlin] 문자열 내 마음대로 정렬하기 (Lv. 1) (0) | 2024.04.12 |
---|---|
[프로그래머스/Kotlin] 가장 가까운 같은 글자 (Lv. 1) (2) | 2024.04.12 |
[프로그래머스/Kotlin] 문자열 내림차순으로 정렬하기 (Lv. 0) (0) | 2024.04.08 |
[프로그래머스/Kotlin] 바탕화면 정리 (Lv. 1) (0) | 2024.04.05 |
[프로그래머스/Kotlin] 체육복 (Lv. 1) (0) | 2024.04.03 |