본문 바로가기

백준

백준 1212 8진수 2진수 (JAVA)

문제

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

 

1212번: 8진수 2진수

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

www.acmicpc.net

코드

package com.company;

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

class Main{
    public static void main(String[] args) throws IOException {
        StringBuilder sb = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String octat_num = br.readLine();

        for(int i=0; i<octat_num.length(); i++){
            int target = octat_num.charAt(i) - '0';
            String s = Integer.toBinaryString(target);
            if(s.length() == 3){
                sb.append(s);
            }
            else if(s.length()==2 && i!=0){
                sb.append("0" + s);
            }
            else if(s.length()==1 && i!=0){
                sb.append("00" + s);
            }
            else
                sb.append(s);
        }

        System.out.println(sb.toString());

    }
}

풀이

입력값을 8진수에서 10진수로 변환해주고 10진수에서 2진수로 변환하는 방법을 사용하였다. 그러나 입력값의 길이가 333,334이였고 입력값의 범위를 벗어났기에 틀렸다고 나왔다. 그래서 방법을 생각해보다 내가 생각한 방식은 예외처리를 계속 해주어서 해결하는 방식이였는데 코드가 너무 지저분해지고 브론즈 문제에 알맞지 않은 난이도라고 생각되어 다른 사람이 푼 코드르 찾아보았다. 그 결과 Integer.toBinaryString 이란 메소드가 있다는 것을 알았고 이를 활용하여 문제를 풀었다.

풀이 방식은 다음과 같다.

  1. 입력값을 문자열로 받아서 하나씩 쪼개어준다.
  2. 쪼개어진 입력값을 하나씩 Integer.toBinaryString에 넣어서 2진수를 StringBuilder에 넣어준다. 이때 처음 입력받은 문자는 따로 처리해준다.

'백준' 카테고리의 다른 글

백준 5597 과제 안 내신 분..? (JAVA)  (0) 2022.07.05
백준 20053 최소,최대2 (JAVA)  (0) 2022.07.05
[백준] 2493 탑(JAVA)  (0) 2022.07.03
[백준] 2580 스도쿠 (JAVA)  (0) 2022.05.04
[백준] 18870 좌표 압축 (JAVA)  (0) 2022.03.17