코딩테스트

[Swift 알고리즘] 백준 BOJ - 1212 8진수 2진수

유정주 2022. 6. 1. 11:27
반응형

안녕하세요. 개발 중인 정주입니다.

 

오늘은 "백준 BOJ - 1212 8진수 2진수" 문제를 풀었습니다.

 


Github

 

GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘

스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub.

github.com

 

문제 링크

 

1212번: 8진수 2진수

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

www.acmicpc.net

 


풀이

곧 다가올 웍스모바일 코테를 준비하기 위해 구현부터 가볍게 몸풀이 하던 중 좋은 문제가 있어 공유합니다.

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())

아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

 

 

반응형