2024. 4. 12. 12:23, ๐กAlgorithm
๋ฐ์ํ
๋ฌธ์
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
}
}
์ค๋ช
- while๋ฌธ์ ์ด์ฉํ์ฌ ๋ชซ์ด 0์ด ๋ ๋๊น์ง 3์ผ๋ก ๋๋์ด์ฃผ๋ฉฐ, answerList์ 3์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ณ์ ์ถ๊ฐํ๋ค.
- ํด๋น ๋ฆฌ์คํธ๋ฅผ reverse()๋ก ๋ค์ง์ด์ฃผ๊ณ , 0๋ถํฐ ๋ฐฐ์ด์ ๋ง์ง๋ง ์ธ๋ฑ์ค๊น์ง (.indices) ๋ฐ๋ณตํ๋ฉฐ, answer์ ๊ฐ ์์ ๊ณฑํ๊ธฐ 3์ n์ ๊ณฑ์ ๋ํด์ค๋ค. pow ์์ 3.0์ ์ฐ๊ณ toInt()๋ฅผ ํด์ค ์ด์ ๋, pow๊ฐ ์ค์์ ๋์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- answer๋ฅผ ๋ฆฌํดํ๋ค.
๐ก array์ plus์ List์ add์ ์ฐจ์ด
- plus์ add๋ ๊ฐ๊ฐ ๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ์์ ์์๋ฅผ ์ถ๊ฐํ๋ ๋ฉ์๋์ด์ง๋ง, ์๋๋ฐฉ์๊ณผ ๊ฒฐ๊ณผ๋ ๋ค๋ฅด๋ค.
- plus๋ ๋ฐฐ์ด(array)์์ ์ฌ์ฉ๋๋ฉฐ, ๊ธฐ์กด ๋ฐฐ์ด์ ์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ ํ '์๋ก์ด' ๋ฐฐ์ด์ ๋ฐํํ๋ค.
๋ฐ๋ผ์ ๊ธฐ์กด ๋ฐฐ์ด์ ๋ณ๊ฒฝ๋์ง ์๋๋ค. - add๋ ๋ฆฌ์คํธ(List)์์ ์ฌ์ฉ๋๋ฉฐ, ๊ธฐ์กด ๋ฆฌ์คํธ์ ์๋ก์ด ์์๊ฐ ์ง์ ์ถ๊ฐ๋๋ค.
- ํ์ฐธ ์ ์ ๊ณต๋ถํ๋ ๋ถ๋ถ์ธ๋ฐ ๊ฐ๋ ์ด ๋ชจ์๋๊ฐ ๋ณด๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ
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