문제
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)
B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.
출력
첫째 줄에 B진법 수 N을 10진법으로 출력한다.
풀이
1. A:10, B:11, .... , Z: 35 를 Dictionary에 저장한다.
2. B진법으로 주어진 N을 배열에 넣는다.
3. 각 자리마다 Int 변환이 되면 숫자 그대로 변환, 변환이 되지 않으면 Dictionary에 대입해서 숫자로 변환한다.
4. 각자리 진법 변환 후 합산한 결과 출력
진법 변환 후 합산
ex) 2진법 1010 을 10진법으로 변환할때 [1, 0, 1, 0] 으로 저장
(2^3 x 1) + (2^2 x 0) + (2^1 x 1) + (2^0 x 0) = 8 + 0 + 2 + 0 = 10
import Foundation
var inputs = readLine()!.split(separator: " ").map{ String($0)}
var number = Array(inputs[0]).map{ String($0) }
var rad = Int(inputs[1])!
var result = 0
var dict = [String: Int]()
for i in 10...35 { // Dictionary에 A:10,....,Z:35 저장
var num = 55
dict[String(UnicodeScalar(num+i)!)] = i
}
for i in 0..<number.count {
var n = number.count - i - 1
var num1 = Int()
if Int(number[i]) == nil { // 알파벳이면 숫자로 변환, 숫자면 그대로 숫자변환
num1 = dict[number[i]]!
} else {
num1 = Int(number[i])!
}
var num2 = 1
for j in 0..<n {
num2 = num2 * rad
}
result = result + ( num2 * num1)
}
print(result)
'코딩테스트 > 백준' 카테고리의 다른 글
BOJ-2720 세탁소 사장 동혁 Swift (0) | 2023.04.08 |
---|---|
BOJ-11005 진법 변환 2 Swift (0) | 2023.04.08 |
BOJ-13909 창문 닫기 Swift (0) | 2023.04.08 |
BOJ-17103 골드바흐 파티션 Swift (0) | 2023.04.08 |
BOJ-4134 다음 소수 Swift (0) | 2023.04.07 |