[boj] 1212. 8진수 2진수

 

1212번: 8진수 2진수

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

www.acmicpc.net

8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.


 

1. 문제 분석

8진수를 2진수로 변환하는 문제입니다.
8진수의 한자리는 2진수 세 자리로 각각 맵핑할 수 있습니다
$ 8^1 = 2^3 $
8진수 한자리당 2진수의 경우의 수가 8가지로 비교적 적은 편이기에 2진수의 형태를 별도의 배열로 저장하여 사용하도록 합니다.
완성되는 2진수의 첫째자리는 0으로 시작할 수 없기에 해당 부분을 주의해 주도록 합니다.

 


 

2. 솔루션

const fs = require('fs')
const numberString = fs.readFileSync(process.platform ===
                                     'linux' ? '/dev/stdin' : 'input.txt')
                       .toString().trim();
// Index 통해 8진수 => 2진수 변환
const eight = ['000', '001', '010', '011', '100', '101', '110', '111'];
let answer = ''
for (let i = 0; i < numberString.length; i++) {
    let currentOctetBit = +numberString.slice(i, i + 1)
    // 첫번째 자리의 8진수인 경우 가장 앞이 '0' 으로 시작할 수 없기 때문에 별도 처리
    if (i === 0) {
        // 3자리 중 첫째 자리에 '1' 이 존재하는 경우
        if (currentOctetBit >= 4) {
            answer += eight[currentOctetBit]
            // 3자리 중 첫째 자리에 '1' 이 존재하지 않는 경우
        } else {
            // 둘째 자리 '1'이 존재하는 경우
            if (currentOctetBit / 2 >= 1) {
                answer += '1'
                currentOctetBit %= 2
            }
            // 셋째 자리
            answer += currentOctetBit.toString()
        }
        // 매칭 배열 안의 2진수 문자열 붙여넣음
    } else {
        answer += eight[currentOctetBit]
    }
}

console.log(answer)

 


마치며

진법 변환 문제는 항상 가장 앞에 '0'으로 시작할 수 없는 점과 '0'이 입력 됐을 때를 주의하여 풀이하도록 합시다.

'알고리즘-문제풀이' 카테고리의 다른 글

[boj] 17103. 골드바흐 파티션  (0) 2023.03.20
[boj] 2089. -2진수  (0) 2023.03.20
[boj] 1373. 2진수 8진수  (0) 2023.03.16
[boj] 17087. 숨바꼭질 6  (0) 2023.03.16
[boj] 9613. GCD 합  (0) 2023.03.16