문제
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
출력
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
풀이
진법 변환 문제의 알고리즘 순서를 역순으로 하면 된다.
1. 0...35 까지 Dictionary에 저장한다. [Int: String]
2.정수 N의 자릿수를 구한다. ( B를 i만큼 곱하고 B^i >= N 인 i를 구함)
3. 각 자리수에서 N / B^j 한 후 배열에 저장 ( j 는 0..< i )
4. Dictionary에 대입해서 문자열로 변환 후 출력
import Foundation
var inputs = readLine()!.split(separator: " ").map{ Int64(String($0))}
var number = inputs[0]!
var rad = inputs[1]!
var strArr = [String]()
var count = 0
var num: Int64 = 1
var dict = [Int: String]()
while num <= number {
num = num * rad
count += 1
}
var arr = [Int64]()
for i in 0...35 {
var num = 55
if i >= 10 {
dict[i] = String(UnicodeScalar(num+i)!)
} else {
dict[i] = String(i)
}
}
for i in 0..<count {
var num1: Int64 = 1
for j in i+1..<count {
num1 = num1 * rad
}
if num1 > number {
arr.append(0)
continue
} else {
arr.append(number / num1)
number = number - ((number / num1) * num1)
}
}
strArr = arr.map{ dict[Int($0)]!}
print(strArr.joined(separator: ""))
'코딩테스트 > 백준' 카테고리의 다른 글
BOJ-2903 중앙 이동 알고리즘 Swift (0) | 2023.04.08 |
---|---|
BOJ-2720 세탁소 사장 동혁 Swift (0) | 2023.04.08 |
BOJ-2745 진법 변환 Swift (0) | 2023.04.08 |
BOJ-13909 창문 닫기 Swift (0) | 2023.04.08 |
BOJ-17103 골드바흐 파티션 Swift (0) | 2023.04.08 |