본문 바로가기

알고리즘/문자열

[KOTLIN] 3진법 뒤집기

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 이하인 자연수입니다.

입출력 예

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 해야 합니다.

풀이

1. 입력된 10진수를 3진수로 변환한다. ( n % 3 값을 저장한다.)

2. 1번에 변환된 값을 다시 10진수로 계산 한다.

* KOTLIN : toInt(radix: Int), toString(radix: Int) 를 이용하면 쉽게 변환 가능하다.

코드

class Solution {
    fun solution(n: Int): Int {
    	// KOTLIN API 이용
        return n.toString(3).reversed().toInt(3)
        
        // KOTLIN API 를 모를 때 직접 진법 변환 구현
        var answer: Int = 0
        
        // 3진법으로 변환하고 반전
        var num = n
        val result = mutableListOf<Int>()
        
        while (true) {
            if (num < 3) {
                result.add(num)
                break
            }
            
            result.add(num % 3)
            num /= 3
        }
        
        val size = result.size
        
        for ((index, r) in result.withIndex()) {
            if (r == 0) continue
            
            answer += r * getValue(size - index)
        }
        
        return answer
    }
    
    private fun getValue(n: Int): Int {
        var count = n - 1
        var result = 3
        
        while (count != 1) {
            result *= 3
            count--
        }
        
        return result
    }
}
728x90

'알고리즘 > 문자열' 카테고리의 다른 글

[KOTLIN] 괄호 변환  (0) 2022.02.21
[KOTLIN] 문자열 압축  (0) 2022.02.14
[KOTLIN] 2016년  (0) 2022.02.11
[KOTLIN] 키패드 누르기  (0) 2022.02.07
[KOTLIN] 신규 아이디 추천  (0) 2022.02.04