본문 바로가기
백준

[백준] 1373번 : 2진수 8진수 – JAVA [자바]

by Hongwoo 2023. 2. 27.
반응형

https://www.acmicpc.net/problem/1373

 

1373번: 2진수 8진수

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

 

백준 1373번 2진수 8진수는 브론즈 1 난이도의 수학 및 문자열 문제이다. 이 문제에서는 2진수가 하나 주어지고 이 2진수를 8진수로 변환시키면 된다.

 

우선 2진수를 8진수로 변환할 때는 세 자리씩 나눠서 8진수로 변환하면 된다. 문제에서 주어진 예시로 예를 들어보겠다.

 

2진수 11001100을 8진수로 변환할 때 뒤에서 부터 세 자리씩 나누면 된다. 11, 001, 100로 세 자리씩 나눈 다음에 11은 3이 되고 001은 1이 되고 그리고 100은 4가 된다. 따라서, 이 2진수의 8진수는 314가 된다.

 

이 문제는 해쉬맵을 이용해서 풀었다. 우선 이 해쉬맵에 가능한 모든 2진수를 넣었다. 그리고 loop을 이용해서 세 자리씩 나눈 다음에 그 값을 맵을 이용 해서 구했다.

 

자세한 코드는 아래에 있는 코드를 참고하면 되겠다.

 


  • 코드

 

import java.io.*;
import java.math.BigInteger;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //해쉬맵 초기화
        Map<String, Integer> map = new HashMap<>(){{
            put("0", 0);
            put("1",1);
            put("00", 0);
            put("01", 1);
            put("10", 2);
            put("11", 3);
            put("001", 1);
            put("010", 2);
            put("011", 3);
            put("100", 4);
            put("101", 5);
            put("110", 6);
            put("111", 7);
            put("000", 0);
        }};
        StringBuilder sb = new StringBuilder();
        String s = br.readLine();
        int n = s.length()-1;
        while (n >= 3) {
            String str = s.substring(n-2, n+1);
            sb.append(map.get(str));
            n-=3;
        }
        sb.append(map.get(s.substring(0, n+1)));
        System.out.print(sb.reverse());
    }
}

 

반응형

댓글