[boj] 1212. 8진수 2진수
- 문제 링크 : https://www.acmicpc.net/problem/1212
- 사용 언어 : Node.js
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 |