코딩테스트

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

유정주 2022. 6. 1. 13:01
반응형

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

 

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

 

Github

 

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

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

github.com

 

문제 링크

 

1373번: 2진수 8진수

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

www.acmicpc.net

 


풀이

바로 직전 포스팅인 8진수 2진수 문제의 반대 버전으로,

2진수 8진수 문제는 2진수를 8진수로 바꾸는 문제입니다.

 

2진수의 3자리는 8진수의 1자리와 같습니다.

2진수의 3자리를 10진수로 계산하여 append( )하면 8진수로 변환이 가능합니다.

 

문제에서 주어지는 input의 길이가 100만까지 될 수 있어

10진수를 거치는 등 중간 과정이 있으면 런타임 에러가 발생합니다.

 

마지막에 Int로 형변환하여 출력해도 런타임 에러가 발생합니다!

 

이점 주의해서 풀면 어려움 없이 해결할 듯 하네요.

 


전체 코드

import Foundation

var input = readLine()!.reversed().map { String($0) }
if input.count % 3 > 0 {
    input.append(contentsOf: Array(repeating: "0", count: 3 - input.count % 3))
}
input = input.reversed()

var octString = ""
for i in stride(from: 0, to: input.count-1, by: 3) {
    let octNumber = (Int(input[i])! * 4) + (Int(input[i+1])! * 2) + Int(input[i+2])!
    octString += String(octNumber)
}

print(octString)

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

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

공감 댓글 부탁드립니다.

 

 

반응형