본문 바로가기
Kotlin(프로그래머스)/Level 1

[프로그래머스/Kotlin] 3진법 뒤집기

by Yuno. 2022. 3. 18.
728x90

문제 링크 -> https://programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

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

programmers.co.kr

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

제한사항 

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

------------------------------------------------------------풀이------------------------------------------------------------------
1. 정수를 3진법으로 변환하는 방법은 3으로 나눠가며 나머지를 n번째 자리에 채워가는 것 입니다. 
ex) 15 -> 17/3 = 5, 2 (몫, 나머지)
              5/3 = 1, 2
              1/3 = 0, 1  => 1 2 2 ( 3진법) => (1*9)+(2*3)+(2*1) = 17 이렇게 진행하면 됩니다.
2. 3진법 배열을 List에 넣었다면 reverse 메소드로 뒤집고 pow메소드로 10진법으로 변경해줍니다.
* pow메소드를 프로그래머스에서 사용하시려면 아래 코드처럼 math라이브러리를 import해주어야 합니다. 

import kotlin.math.*
class Solution {
    fun solution(n: Int): Long {
        var answer: Long = n.toLong()
        var thr = ArrayList<Long>()
        while(true){
            if(answer<3L){
                thr.add(answer)
                break
            }else{
                thr.add(answer%3)  
                answer = (answer/3)
            }
        }
        thr.reverse()
        answer = thr.get(0)
        for(i in 1..thr.size-1){
            answer+= (thr.get(i).toLong()*((3.0).pow(i))).toLong()
        }
        return answer
    }
}

------------------------------------------------------------결과------------------------------------------------------------------

10진법<->3진법 변환하는 방법을 알면 금방 풀 수 있는 문제였습니다

다만 반환 값이 Long타입인데 계산도중 또는 결과가 Int의 MAX_VALUE를 넘어가기때문인것 같습니다. 이부분만 유의하셔서 코드 작성하시면 됩니당.

* 숫자옆에 붙어있는 L은 Long타입을 표시한 것 입니다.

 

 

- 문제에 대한 질문 댓글 환영!
- 중간에 잘못된 부분이 있다면 댓글로 남겨주세요. 수정하겠습니다.

728x90

댓글