문제 링크 -> 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타입을 표시한 것 입니다.
- 문제에 대한 질문 댓글 환영!
- 중간에 잘못된 부분이 있다면 댓글로 남겨주세요. 수정하겠습니다.
'Kotlin(프로그래머스) > Level 1' 카테고리의 다른 글
[프로그래머스/Kotlin] 2016년 (0) | 2022.03.19 |
---|---|
[프로그래머스/Kotlin] 두 개 뽑아서 더하기 (0) | 2022.03.19 |
[프로그래머스/Kotlin] 약수의 개수와 덧셈 (0) | 2022.03.18 |
[프로그래머스/Kotlin] 실패율 (0) | 2022.03.17 |
[프로그래머스/Kotlin] 체육복 (0) | 2022.03.17 |
댓글