본문 바로가기
백준

[백준] 알고리즘 분류(문자열,JAVA)1373번, 2진수 8진수

by 열정적인 이찬형 2022. 9. 18.

문제 링크

 

1373번: 2진수 8진수

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

www.acmicpc.net


주의사항

  • JAVA를 사용하여 프로그램을 사용하였습니다.
  • 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{ 	
	public static void main(String[] args){
    }
}

문제 설명

 


접근 방법

이 문제에 핵심

 

1. 2진수로 주어진 입력값을 8진수로 변경한 값을 결과로 출력합니다.

2. 2진수의 길이는 1,000,000을 넘지 않는다.

 

알고리즘 진행 순서.

 

1. 입력된 2진수를 저장합니다.

 

2. 2진수를 8진수의 형태로 변경하여 결과로 출력합니다.

 

2진수 8진수로 변경

 

8진수의 값을 2진수로 표현하려면 아래와 같다.

 

000 → 0 : 0 × 2² + 0 × 2 +  0 × 1 = 0

001 → 1 : 0 × 2² + 0 × 2 +  1 × 1 = 1

010 → 2 : 0 × 2² + 1 × 2 +  0 × 1 = 2

011 → 3 : 0 × 2² + 1 × 2 +  1 × 1 = 3

100 → 4 : 1 × 2² + 0 × 2 +  0 × 1 = 4

101 → 5 : 1 × 2² + 0 × 2 +  1 × 1 = 5

110 → 6 : 1 × 2² + 1 × 2 +  0 × 1 = 6

111 → 7 : 1 × 2² + 1 × 2 +  1 × 1 = 7

 

 

예제입력 1.

 

1. 입력된 단어를 저장합니다.

 

11001100

 

2. 2진수를 8진수의 형태로 변경하여 결과로 출력합니다.

 

11001100을 모두 8진수의 2진수로 나타내게 0을 붙입니다.

 

011 001 100

 

2진수를 8진수로 변경011 = 3001 = 1100 = 4

 

314을 결과로 출력합니다.

 

  • BufferedReader를 사용하여 입력되는 단어를 저장합니다.
  • 2진수를 8진수의 형태로 바꾸기 위해서 자릿수가 맞지 않으면 0을 추가합니다.
  • 2진수를 8진수의 형태로 변경합니다.
  • 8진수의 값을 BufferedWriter 저장하였습니다.
  • BufferedWriter에 저장된 결과값을 출력하였습니다.
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        //입력값 처리하는 BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //결과값 출력하는 BufferedWriter
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String input = br.readLine();
        StringBuilder sb = new StringBuilder();
        //2진수를 8진수로 바뀔 수 있도록 0을 추가합니다.
        if(input.length()%3!=0)
            for(int i=0;i<input.length()%3;i++)
                input = "0" + input;
        //2진수를 8진수로 변경하여 StringBuilder에 저장합니다.
        for(int i=0;i<input.length();i+=3){
            sb.append( Character.getNumericValue(input.charAt(i+2)) + 
            Character.getNumericValue(input.charAt(i+1)) * 2
                    +Character.getNumericValue(input.charAt(i)) * 4);
        }
        bw.write(sb.toString());	//8진수 BufferedWriter 저장
        bw.flush();		//결과 출력
        bw.close();
        br.close();
    }
}

댓글