![11816번: 8진수, 10진수, 16진수](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgHScP%2FbtsDW7MsC2Z%2FxOLwxTGLbZaiS0uCAnQMX0%2Fimg.png)
![스몰스테핑](https://t1.daumcdn.net/tistory_admin/static/manage/images/r3/default_L.png)
11816번: 8진수, 10진수, 16진수백준/문제2024. 1. 24. 15:00
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/11816
11816번: 8진수, 10진수, 16진수
첫째 줄에 X가 주어진다. X는 10진수로 바꿨을 때, 1,000,000보다 작거나 같은 자연수이다. 16진수인 경우 알파벳은 소문자로만 이루어져 있다.
www.acmicpc.net
언어 : Kotlin
문제 설명 :
정수 X가 주어진다. 정수 X는 항상 8진수, 10진수, 16진수 중에 하나이다.
8진수인 경우에는 수의 앞에 0이 주어지고, 16진수인 경우에는 0x가 주어진다.
X를 10진수로 바꿔서 출력하는 프로그램을 작성하시오.
입력 :
첫째 줄에 X가 주어진다. X는 10진수로 바꿨을 때, 1,000,000보다 작거나 같은 자연수이다. 16진수인 경우 알파벳은 소문자로만 이루어져 있다.
출력 :
첫째 줄에 입력받은 X를 10진수로 바꿔서 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
10 | 1 |
010 | 8 |
0x10 | 16 |
0x3f6 | 1014 |
풀이 :
B진법의 수를 10진법으로 바꾸는 알고리즘을 사용했다.
import java.io.BufferedWriter
import java.io.OutputStreamWriter
import kotlin.math.pow
fun main() = with(System.`in`.bufferedReader()) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
bw.write("${toDecimal(readLine())}")
bw.flush()
bw.close()
}
fun toDecimal(n: String): Int {
var answer = 0
var sliceIdx = 1
val base: Double
when {
n.startsWith("0x") -> { sliceIdx = 2; base = 16.0 }
n.startsWith("0") -> { sliceIdx = 1; base = 8.0 }
else -> { base = 10.0 }
}
if (base != 10.0) {
val temp = n.slice(sliceIdx .. n.lastIndex)
var power = temp.lastIndex
for (i in temp.indices) {
val num = temp[i]
answer += if (num in 'a'..'z') {
(num.code - 87) * base.pow(power--).toInt()
} else {
(num.code - '0'.code) * base.pow(power--).toInt()
}
}
} else {
answer = n.toInt()
}
return answer
}
'백준 > 문제' 카테고리의 다른 글
3062번: 수 뒤집기 (1) | 2024.01.26 |
---|---|
12919번: A와 B 2 (1) | 2024.01.25 |
1305번: 광고 (1) | 2024.01.23 |
6996번: 애너그램 (1) | 2024.01.22 |
2607번: 비슷한 단어 (0) | 2024.01.19 |
![스몰스테핑](https://t1.daumcdn.net/tistory_admin/static/manage/images/r3/default_L.png)
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!