본문 바로가기
코딩 테스트/[JAVA] 백준

[JAVA] 백준 1373번 2진수 8진수

by M개발자 2022. 3. 15.
반응형

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


가독성있고 좋은 코드라 생각하지는 않지만 직접 풀어보는거에 의의를 두었다.

 

 

1373번: 2진수 8진수

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

www.acmicpc.net

 

반응형

댓글