본문 바로가기

코딩테스트/백준

BOJ-2745 진법 변환 Swift

문제

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