[백준 1212] 8진수 2진수

like0·2022년 8월 29일
0

코테준비(JAVA)

목록 보기
30/37

생각 정리

자바 내장함수를 쓰지 않고, 8진수의 숫자 하나당 2진수의 세자리로 나타낼 수 있으니 (ex. 4 -> 110) 이를 이용해보고자 했다.

생각하지 못한 것

세자리를 맞추기 위해 앞에 0을 붙여도 보고, 배열도 거꾸로 돌려보고 이것저것 다 했지만, 결국 가장 기본적인것을 간과했다 🥲

8진수 0을 2진수 0으로 변환할 때 0 -> 000 이지만, 내가 while문을 잘못 쓰는 바람에 while문 자체가 동작을 하지 않았ㄷr ... ㅎㅎ (10 -> 1000이 되어야 하는데 1이 나옴)

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //Integer.toString(3);
        String octalString = br.readLine();
        String[] arr = {"000", "001", "010", "011", "100", "101", "110", "111"};

        if(octalString.equals("0")){
            System.out.println(0);
            return ;
        }

        StringBuilder binaryString = new StringBuilder();
        for(int i=0; i<octalString.length(); i++) {
            int n = octalString.charAt(i) - '0' ;
            String miniString = "";
            miniString += arr[n];
            // while(n != 0) {
            //     miniString += n%2;
            //     n /= 2;
            // }
            StringBuffer sb = new StringBuffer(miniString);
           
            if(sb.length() == 1) binaryString.append("00" + sb.toString()); // ("00" + sb.reverse().toString());
            else if(sb.length() == 2) binaryString.append("0" + sb.toString());
            else binaryString.append(sb.toString());
            //System.out.println(binaryString);

        }
        if (binaryString.charAt(0)=='0') binaryString.deleteCharAt(0);
        if (binaryString.charAt(0)=='0') binaryString.deleteCharAt(0);
        System.out.println(binaryString);
    }
    
}

아주 부끄럽지만 다시는 이런 실수를 하지 않기 위해 남긴다.
내가 구현력이 부족하다는 것을 다시한번 느낀 문제.. ㅠ ㅠ

profile
배우고 성장하는 개발자가 되기!

0개의 댓글