728x90
2진수를 8진수로 바꾸려면 2진수의 3비트씩 잘라내 해당 비트의 8진수값을 순서대로 붙이면 된다.
3개씩 잘라내기 위해 2진수의 길이가 3의 배수가 아니면 모자른 길이만큼 2진수 앞에 0을 붙인다.
11001100로 예를 들면
11001100 => 011001100 => 011 / 001 / 100
011 => 3
001 => 1
100 => 4
=> 314
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder binary = new StringBuilder(br.readLine());
bw.write(binaryToOctal(binary).toString());
bw.flush();
br.close();
bw.close();
}
static StringBuilder binaryToOctal(StringBuilder binary) {
int addZero = binary.length() % 3 == 0 ? 0 : 3 - binary.length() % 3;
for (int i = 0; i < addZero; i++) {
binary.insert(0, '0');
}
StringBuilder octal = new StringBuilder();
for (int i = 0; i < binary.length(); i += 3) {
String digit = binary.substring(i, i + 3);
octal.append(binaryDigitToOctal(digit));
}
return octal;
}
static char binaryDigitToOctal(String binary) {
switch (binary) {
case "000":
return '0';
case "001":
return '1';
case "010":
return '2';
case "011":
return '3';
case "100":
return '4';
case "101":
return '5';
case "110":
return '6';
case "111":
return '7';
default:
return '?';
}
}
}
728x90
'백준 > Java' 카테고리의 다른 글
[백준 자바] 10829번(이진수 변환) - 자연수를 2진수로 바꾸기 (0) | 2024.06.19 |
---|---|
[백준 자바] 14915번(진수 변환기) - 10진수를 n진수로 바꾸기 (1) | 2024.06.19 |
[백준 자바] 1212번(8진수 2진수) - 8진수를 2진수로 바꾸기 (0) | 2024.06.19 |
[백준 자바] 1110번(더하기 사이클) (0) | 2024.06.18 |
[백준 자바] 13410번(거꾸로 구구단) - 정수 뒤집기 (0) | 2024.06.18 |