반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 "백준 BOJ - 1212 8진수 2진수" 문제를 풀었습니다.
Github
문제 링크
풀이
곧 다가올 웍스모바일 코테를 준비하기 위해 구현부터 가볍게 몸풀이 하던 중 좋은 문제가 있어 공유합니다.
Swift에서는 10진법에서 다른 진법으로 변환이 편리해서 진법 변환 문제에 대해 대비를 하지 않고 있었는데요.
이 문제처럼 8진법 -> 2진법으로 변환하는 것은 Swift의 radix를 이용해 해결하지 못합니다.
따라서 진법 변환 방법에 대해 이해를 하고 있어야 문제를 해결할 수 있습니다!
8진법의 1자리는 2진법의 3자리로 치환이 가능합니다. (8은 2^3이기 때문)
즉, 8진법의 8은 2진법의 100, 8진법의 1은 2진법의 001으로 변경이 가능하다는 의미입니다.
이번 문제의 예시인 314를 보면
3 -> 011
1 -> 001
4 -> 100
이기 때문에 314 -> 011001100 -> 11001100 이 되는 것입니다.
따라서 맨 첫 숫자만 별개로 2진수로 변환하고
나머지 숫자는 3자리를 지켜서 변환하여 append( )하면 쉽게 2진수로 변환할 수 있습니다.
전체 코드
import Foundation
var input = readLine()!.map { String($0) }
var binaryArray: [String] = [String(Int(input.first!)!, radix: 2)]
for number in input[1...] {
let binaryNumber = String(Int(number)!, radix: 2)
let string = String(format: "%03d", Int(binaryNumber)!)
binaryArray.append(string)
}
print(binaryArray.joined())
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형