일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- bronze3
- 다크모드제한
- naver open api
- gradle설정
- dp
- LV1
- bronze4
- 임시저장하기
- 뷰클래스
- Android
- RecyclerView
- LIS
- Top-Down
- 백준
- recyclerView 클릭이벤트
- Alert Dialog
- RETROFIT
- 테마변경
- Silver5
- 프로그래머스
- silver4
- toLong()
- Kotlin
- map
- bottom-up
- fragment에서 context사용
- stack
- silver3
- bronze2
- 녹음기
Archives
- Today
- Total
유니 코드
[PGS/프로그래머스][Lv1] 3진법 뒤집기(Kotlin) 본문
[문제 설명]
자연수 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) 3진법 변환 : input 값을 감소시키면서 반복문 진행
2) stack의 요소를 하나씩 pop하면서 10진수로 변환
3진법 변환은 수월하게 코드를 짤 수 있었다. 문제는 10진수로 변환하는게 까다로웠다.
문제를 읽고 바로 코드를 짜서 그런듯하다..
어떻게 할지 고민하다가 stack을 이용하기로 결정했다.
stack은 마지막에 추가된 요소가 가장 먼저 나오기 때문에 굳이 배열을 뒤집지 않기 때문에 적합하다고 생각했다.
내가 작성한 코드로 테스트 코드를 통과한 후 다른 사람의 풀이를 보는데
아주 놀라운 코드를 발견했다.....(밑에 첨부)
실화인가.... 코드가 한줄인것도 놀랍지만
더 놀라웠던 것은 toString과 toInt에 인자를 넣어서 사용할 수 있다는 것이었다..
fun String.toInt(radix: Int): Int
[코드]
import java.util.Stack
class Solution {
fun solution(n: Int): Int {
var answer: Int = 0
var input = n
val stack = Stack<Int>()
while(input >= 3){
stack.add(input % 3)
input /= 3
}
stack.add(input % 3)
var base = 1
for(i in 0 until stack.size){
answer += stack.pop() * base
stack *= 3
}
return answer
}
}
'알고리즘 > 미분류' 카테고리의 다른 글
[PGS/프로그래머스][Lv1] 하샤드 수(Kotlin) (0) | 2022.05.10 |
---|---|
[PGS/프로그래머스][Lv1] 핸드폰 번호 가리기(Kotlin) (0) | 2022.05.10 |
[PGS/프로그래머스][Lv1] 정렬 : K번째수(Kotlin) (0) | 2022.05.08 |
[PGS/프로그래머스][Lv1] 콜라츠추측(Kotlin) (0) | 2022.05.08 |
Comments