반응형
2진수 8진수
2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오.
예제 입출력
입력 | 출력 |
11001100 | 314 |
개념
2진수를 8진수로 변환하는 방법은 뒤에서부터 3자리씩 자르고 10진수로 변환하는 방법이다.
코드
1. 입력받은 2진수의 길이에 따라 0 추가하기
앞에서부터 자르기 위해 입력값의 길이를 3으로 나눈 나머지에 따라 앞자리에 0을 추가해준다.
StringBuilder.insert(int i, String str)
insert 메소드를 사용하여 i번째에 str을 추가할 수 있다.
→ binary.insert(0, "0"); // 0번째에 "0" 추가
2. 2진수를 10진수로 변환하는 메소드 구현
2진수를 세 자리씩 자르고 10진수로 변환하여 합친 것이 8진수이다.
[JAVA] 2진수 → 10진수 / 10진수 → 2진수 변환 코드 | 이진수 십진수 2진수 십진수
3. i가 3씩 증가하는 for문 반복
앞에서부터 3자리씩 입력값을 자르기 위해 3씩 반복하였다.
binaryToDecimal 메소드에 입력값을 3씩 잘라 매개변수로 보내 10진수로 받는다.받은 10진수를 출력 변수 answer에 더한다.
import java.util.Scanner;
// 2진수 8진수
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 입력값을 StringBuilder로 받음
StringBuilder binary = new StringBuilder(scanner.next());
int length = binary.length();
StringBuilder answer = new StringBuilder();
// 입력값의 길이에 따라 맨 앞에 0을 더하여 3으로 나누어 떨어지게 만들음
if (length % 3 == 1) binary.insert(0, "00");
else if (length % 3 == 2) binary.insert(0, "0");
// 3씩 증가하는 for문 반복
for (int i = 0; i < length; i += 3) {
// 입력값을 앞에서부터 3씩 잘라 10진수로 변환하여 더한다.
answer.append(binaryToDecimal(binary.substring(i, i + 3)));
}
System.out.println(answer);
}
// 2진수를 10진수로 변환하는 메소드
public static String binaryToDecimal(String b) {
int sum = 0;
int i = 1;
int a = Integer.parseInt(b);
while (a > 0) {
sum += i * (a % 10); // 1의 자리 수와 i 곱하여 더함
i = i * 2; // 2진수이기에 i에 2를 곱해줌
a /= 10; // 1의 자리 수 자르기
}
return Integer.toString(sum);
}
}
성능 요약
메모리: 63052 KB, 시간: 640 ms
가독성있고 좋은 코드라 생각하지는 않지만 직접 풀어보는거에 의의를 두었다.
반응형
'코딩 테스트 > [JAVA] 백준' 카테고리의 다른 글
[JAVA] 별 찍기 | 백준 BOJ 2438 2439 2440 2441 2442 2443 2444 2445 2446 2522 2523 자바 (0) | 2022.03.16 |
---|---|
[JAVA] 백준 1598번 꼬리를 무는 숫자 나열 | BOJ 자바 bronze 3 (0) | 2022.03.15 |
[JAVA] 백준 8674번 Tabliczka (0) | 2022.03.10 |
[JAVA] 백준 5893번 17배 (0) | 2022.03.10 |
[JAVA] 백준 14623번 감정이입 (0) | 2022.03.10 |
댓글