Algorithm/kotlin

[프로그래머스/Kotlin] 3진법 뒤집기 (Lv. 1)

나연쓰 2024. 4. 8. 15:58

문제

자연수 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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr