반응형
백준 6679번 문제입니다. (solved.ac) 기준 브론즈 2 문제입니다.
https://www.acmicpc.net/problem/6679
문제
문제 접근
특정한 네자리 숫자를 10, 12, 16진법으로 변환 후 모든 자릿수를 더하였을 때 같은 값이 나오는 숫자가 있다면 그것을 싱기한 네자리 숫자라고 합니다.
1000 ~ 9999까지의 모든 수들 중 싱기한 네자리 숫자를 출력하면 되는 문제입니다. 힌트에서 싱기한 네자리 숫자의 첫 번째 수는 2992로 알려줬으므로 1,000부터가 아닌 2,992부터 탐색하도록 하였습니다.
2992~9999까지 모든 수를 탐색하여 각 10, 12, 16진법으로 변환 후 자릿수를 더하여 셋이 같다면 출력하도록 하였습니다.
코틀린에서 진법 변화를 하고 싶을 경우 toString()의 인자로 수를 넣어주면 해당 진법으로 변환이 됩니다. 넣지 않는다면 기본인 10진수로 됩니다. ex) num.toString(16) -> num을 16진법으로 변환.
12, 16진법으로 변환하면 알파벳이 나오게 되기 때문에 각 진법으로 변환 후 매핑을 하여 그냥 숫자라면 정수형인 int로 그렇지 않고 알파벳이라면 해당 알파벳에 맞는 수를 반환해주는 함수를 만들어 준 후 모든 자릿수를 더하였습니다.
정답 코드
fun main() {
for (no in 2992..9999) {
val decimal = no.toString().toList()
.map { if (it.isDigit()) it - '0' else toNum(it) }.sum()
val duoDecimal = no.toString(12).toList()
.map { if (it.isDigit()) it - '0' else toNum(it) }.sum()
val hexaDecimal = no.toString(16).toList()
.map { if (it.isDigit()) it - '0' else toNum(it) }.sum()
if (decimal == duoDecimal && decimal == hexaDecimal) println(no)
}
}
fun toNum(n: Char): Int {
var num = 0
when (n) {
'a' -> num = 10
'b' -> num = 11
'c' -> num = 12
'd' -> num = 13
'e' -> num = 14
'f' -> num = 15
}
return num
}
반응형
'알고리즘 문제풀이[Algorithm]' 카테고리의 다른 글
[백준] 2635번 수 이어가기(브루트포스 - 완전탐색)[Kotlin - 코틀린] (0) | 2022.07.06 |
---|---|
[백준] 1476번 날짜 계산(브루트포스 - 완전탐색)[Kotlin - 코틀린] (0) | 2022.07.05 |
[백준] 10211번 Maximum Subarray(브루트포스 - 완전탐색)[Kotlin - 코틀린] (0) | 2022.07.01 |
[백준] 1120번 문자열(브루트포스 - 완전탐색)[Kotlin - 코틀린] (0) | 2022.07.01 |
[백준] 1145번 적어도 대부분의 배수(브루트포스 - 완전탐색)[Kotlin - 코틀린] (0) | 2022.07.01 |
최근댓글