[Kotlin] 3์ง„๋ฒ• ๋’ค์ง‘๊ธฐ (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜) : toInt(n), toString(n), .plus(), .add()
๋ฐ˜์‘ํ˜•

 

 

 

 

๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/68935

 

 


 

์ ‘๊ทผ

 

  • 10์ง„๋ฒ• -> 3์ง„๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ -> ๋’ค์ง‘๊ธฐ -> ๋‹ค์‹œ 10์ง„๋ฒ•์œผ๋กœ ๋ณ€ํ™˜์ด ํ•„์š”ํ•œ ๋ฌธ์ œ๋‹ค.
  • 10์ง„์ˆ˜ 240์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž. 10์ง„์ˆ˜ 240์„ 3์ง„๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ๋Š” ๋ชซ์ด 1์ด ๋  ๋•Œ๊นŒ์ง€ 3์œผ๋กœ ๊ณ„์† ๋‚˜๋ˆ„๊ณ  ๊ทธ ๋‚˜๋จธ์ง€๋“ค์„ ์ €์žฅํ•˜์—ฌ ์—ญ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.
  • 240 % 3 = 0
    80 % 3 = 2
    26 % 3 = 2
    8 % 3 = 2
    2 % 3 = 2
    ์ดํ›„์—” ๋ชซ์ด 0์ด ๋˜๋ฏ€๋กœ ๋”์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Œ, ๋”ฐ๋ผ์„œ 240์˜ 3์ง„์ˆ˜๋Š” 22220
  • ๋‹ค๋งŒ ๋ฌธ์ œ์—์„œ 3์ง„๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋‹ค์‹œ ๋’ค์ง‘๋Š” ๊ฒƒ์„ ์›ํ•˜๋ฏ€๋กœ, ์ฝ”๋“œ์งœ๊ธฐ๋Š” ๋” ๊ฐ„๋‹จํ•ด์กŒ๋‹ค.
    ์›๋ž˜ ๋‚˜๋จธ์ง€๋ฅผ ์—ญ์ˆœ์œผ๋กœ ์ ์œผ๋ฏ€๋กœ, ๋ฌธ์ œ์—์„œ ๋’ค์ง‘๋Š” ๊ฒƒ์„ ์›ํ•œ๋‹ค๋ฉด ๊ทธ๋ƒฅ ๋‚˜๋จธ์ง€๊ฐ€ ๋‚˜์˜ค๋Š”๋Œ€๋กœ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.
  • 10์ง„์ˆ˜์—์„œ ๋‹ค์‹œ 3์ง„์ˆ˜๋กœ ๋ฐ”๋€Œ๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๋‹ค.
    ์˜ค๋ฅธ์ชฝ ์ž๋ฆฌ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๊ฐ€๋ฉด์„œ 3^(์ž๋ฆฌ์ˆ˜)์œผ๋กœ n์ œ๊ณฑํ•œ ํ›„, ๊ฒฐ๊ณผ๋ฅผ ๋”ํ•˜๋ฉด ๋œ๋‹ค.

 

์‹คํŒจ ์ฝ”๋“œ, ๋‹ต์ด ๋‹ค๋ฆ„

import kotlin.math.*

class Solution {
    fun solution(n: Int): Int {
        
        var num = n
        val answerArray = intArrayOf()
        var answer = 0
        
        // 3์ง„๋ฒ•, ์•ž๋’ค๋ฐ˜์ „(์ž๋™)
        if(num != 1){
           answerArray.plus(num % 3)
           num /= 3
        }
        
        // 10์ง„๋ฒ•์œผ๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜
        for(i in 0 until answerArray.size){
            answer += answerArray[i] * 3.0.pow(i).toInt()
        }
        
        return answer
    }
}
  • ํ•˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด ๊ตฌํ˜„์„ ํ•˜๋ฉด ๋ฆฌํ„ด๊ฐ’์ด 0์ด ๋‚˜์˜จ๋‹ค.
  • ์ด ์ฝ”๋“œ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ฃผ์š” ์ด์œ ๋Š” answerArray ๋ฐฐ์—ด์ด ์‹ค์ œ๋กœ ๋นˆ ๋ฐฐ์—ด๋กœ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๊ณ , ๊ทธ ํ›„์—๋„ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. plus() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐฐ์—ด์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋”๋ผ๋„ ํ•ด๋‹น ๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ , ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ answerArray ๋ฐฐ์—ด์€ ์—ฌ์ „ํžˆ ๋นˆ ๋ฐฐ์—ด๋กœ ์œ ์ง€๋œ๋‹ค.
  • ๋นˆ ๋ฐฐ์—ด์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด plus() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ํ›„์— ๋ฐ˜ํ™˜๋œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ answerArray์— ๋‹ค์‹œ ํ• ๋‹นํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ๋”ํ•˜๊ณ  ํ•˜๋Š”๊ฒŒ ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ณด์˜€๋‹ค.
  • ๋” ๊น”๋”ํ•˜๊ณ  ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์€ ArrayList๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ๋ฐฐ์—ด์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    ์ด๋ฅผ ํ†ตํ•ด ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ๋ณต์‚ฌํ•˜๋Š” ๊ณผ์ •์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2์ฐจ ์‹คํŒจ์ฝ”๋“œ

import kotlin.math.*

class Solution {
    fun solution(n: Int): Int {
        
        var num = n
        val answerList = ArrayList<Int>()
        var answer = 0
        
        // 3์ง„๋ฒ•, ์•ž๋’ค๋ฐ˜์ „(์ž๋™)
        while(num != 1){
           answerList.add(num % 3)
           num /= 3
        }
        
        // 10์ง„๋ฒ•์œผ๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜
        for(i in 0 until answerList.size){
            answer += answerList[i] * 3.0.pow(i).toInt()
        }
        
        return answer
    }
}
  • ๋™์  ๋ฐฐ์—ด์ธ List๋กœ ์„ ์–ธํ•˜์—ฌ List.add๋กœ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟจ์œผ๋‚˜, ์—ฌ์ „ํžˆ ๊ฒฐ๊ณผ๊ฐ’์ด ์›ํ•˜๋Š”๋Œ€๋กœ ๋‚˜์˜ค์ง€ ์•Š์•˜๋‹ค.
  • ์ผ๋‹จ ๋ชซ์ด 0์ผ ๋•Œ๊นŒ์ง€ ๋‚˜๋ˆ„์–ด์ฃผ์–ด์•ผ ํ•˜๋ฏ€๋กœ, num != 0์œผ๋กœ ์ˆ˜์ •ํ•œ๋‹ค.
  • answerList.reverse()๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋”๋‹ˆ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”๋ฐ, ์•„๋ฌด๋ž˜๋„ ๋ฌธ์ œ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

 

 


 

์„ฑ๊ณต ์ฝ”๋“œ

 

import kotlin.math.*

class Solution {
    fun solution(n: Int): Int {
        
        var num = n
        val answerList = ArrayList<Int>()
        var answer = 0
                
        // 3์ง„๋ฒ•, ์•ž๋’ค๋ฐ˜์ „(์ž๋™)
        while(num > 0){
           answerList.add(num % 3) 
           num /= 3
        }
        
        // 10์ง„๋ฒ•์œผ๋กœ ๋ณ€ํ™˜
        answerList.reverse()
        for(i in answerList.indices){
            answer += answerList[i] * 3.0.pow(i).toInt()
        }
        
        return answer
    }
}

 


 

์„ค๋ช…

 

  1. while๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๋ชซ์ด 0์ด ๋  ๋•Œ๊นŒ์ง€ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด์ฃผ๋ฉฐ, answerList์— 3์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ํ•œ๋‹ค.
  2. ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ๋ฅผ reverse()๋กœ ๋’ค์ง‘์–ด์ฃผ๊ณ , 0๋ถ€ํ„ฐ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊นŒ์ง€ (.indices) ๋ฐ˜๋ณตํ•˜๋ฉฐ, answer์— ๊ฐ ์š”์†Œ ๊ณฑํ•˜๊ธฐ 3์˜ n์ œ๊ณฑ์„ ๋”ํ•ด์ค€๋‹ค. pow ์•ž์— 3.0์„ ์“ฐ๊ณ  toInt()๋ฅผ ํ•ด์ค€ ์ด์œ ๋Š”, pow๊ฐ€ ์‹ค์ˆ˜์— ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  3. answer๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

 

๋” ๋น ๋ฅธ ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?

 

 

๐Ÿ’ก array์˜ plus์™€ List์˜ add์˜ ์ฐจ์ด

  • plus์™€ add๋Š” ๊ฐ๊ฐ ๋ฐฐ์—ด๊ณผ ๋ฆฌ์ŠคํŠธ์—์„œ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด์ง€๋งŒ, ์ž‘๋™๋ฐฉ์‹๊ณผ ๊ฒฐ๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค.
  • plus๋Š” ๋ฐฐ์—ด(array)์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ธฐ์กด ๋ฐฐ์—ด์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ '์ƒˆ๋กœ์šด' ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    ๋”ฐ๋ผ์„œ ๊ธฐ์กด ๋ฐฐ์—ด์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. 
  • add๋Š” ๋ฆฌ์ŠคํŠธ(List)์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ์— ์ƒˆ๋กœ์šด ์š”์†Œ๊ฐ€ ์ง์ ‘ ์ถ”๊ฐ€๋œ๋‹ค.

 

 

[Kotlin ๊ธฐ์ดˆ] ์ฝ”ํ‹€๋ฆฐ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• - ๋ฐฐ์—ด๊ณผ ์ปฌ๋ ‰์…˜

4 ๋ฐฐ์—ด๊ณผ ์ปฌ๋ ‰์…˜ Int, Double ๋“ฑ: ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ์ €์žฅ ๋ฐฐ์—ด(Array), ์ปฌ๋ ‰์…˜(Collection - List, Map, Set) : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ์ €์žฅ ๋ฐฐ์—ด (Array) var ๋ณ€์ˆ˜ = Array(๊ฐœ์ˆ˜) ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ๋‹ด์„

limheejin.tistory.com

  • ํ•œ์ฐธ ์ „์— ๊ณต๋ถ€ํ–ˆ๋˜ ๋ถ€๋ถ„์ธ๋ฐ ๊ฐœ๋…์ด ๋ชจ์ž๋ž€๊ฐ€ ๋ณด๋‹ค.

 

 


 

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

 

class Solution {
    fun solution(n: Int): Int {
        return n.toString(3).reversed().toInt(3)
    }
}
  • ์ƒ๊ฐ์ง€๋„ ๋ชปํ–ˆ๋˜ ํ’€์ด๋‹ค.
  • [IntType].toString(3) ์„ ํ•˜๋ฉด 3์ง„๋ฒ•์œผ๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค. 
    [StringType].toInt(10) ์„ ํ•˜๋ฉด 10์ง„๋ฒ•์œผ๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” toInt()๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฃผ์–ด์ง„ ๋‚ด์šฉ์„ 10์ง„์ˆ˜๋กœ ๋ฐ”๊พธ์–ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.
    ์ด ๊ด„ํ˜ธ()์•ˆ์— ์ˆซ์ž๋ฅผ ๋„ฃ์œผ๋ฉด ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž์˜ ์ง„๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.
    (์˜ˆ) "".toInt(2) 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜, "".toInt(16) 16์ง„์ˆ˜๋กœ ๋ณ€ํ™˜
  • toString()์˜ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๊ธฐ๋ณธ์ ์ธ toString()์€ 10์ง„์ˆ˜๋กœ ํ‘œํ˜„๋œ๋‹ค.
    ๊ทธ๋Ÿฌ๋‚˜ ์ˆซ์ž.toString(2)๋Š” 2์ง„์ˆ˜๋กœ ํ‘œํ˜„, ์ˆซ์ž.toString(16)๋Š” 16์ง„์ˆ˜๋กœ ํ‘œํ˜„๋œ๋‹ค.
  • n.toString(3) : ์ž…๋ ฅ๋œ ์ž์—ฐ์ˆ˜ n์„ 3์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • reversed() : 3์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ ์—ญ์ˆœ์œผ๋กœ ๋’ค์ง‘๋Š”๋‹ค.
  • โ“ toInt(3) : ์—ญ์ˆœ์œผ๋กœ ๋’ค์ง‘ํžŒ 3์ง„์ˆ˜ ๋ฌธ์ž์—ด์„ 10์ง„์ˆ˜๋กœ ํ•ด์„ํ•œ๋‹ค.
    ์ด ๋ถ€๋ถ„์—์„œ ์™œ toInt(10)์„ ์“ฐ๋Š”๊ฒŒ ์•„๋‹Œ์ง€ ๊ถ๊ธˆํ–ˆ๋Š”๋ฐ, toInt(3)์€ ์‹ค์ œ๋กœ 3์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฌธ์ž์—ด์„ 10์ง„์ˆ˜๋กœ ํ•ด์„๋  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์•ž์—์„œ toString(3)์œผ๋กœ 3์ง„์ˆ˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ–ˆ์œผ๋‹ˆ, ๋‹ค์‹œ toInt(3)์„ ํ˜ธ์ถœํ•˜์—ฌ 10์ง„์ˆ˜๋กœ ํ•ด์„๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฝ”๋“œ๋Š” ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค.

 

 

 

 

 

๋ฐ˜์‘ํ˜•
 ๐Ÿ’ฌ C O M M E N T