[백준] 1373번 2진수 8진수 - Java, 자바

Kim Ji Eun·2022년 1월 11일
0

문제

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

코드


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

// 1373번 2진수 8진수
public class boj_3_1373 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        String N = br.readLine();

        // 세자리씩 끊었을 때 한 자리만 남았을 경우
        if(N.length() % 3 == 1)
            sb.append(N.charAt(0));

        // 세자리씩 끊었을 때 두 자리만 남았을 경우
        if(N.length() % 3 == 2)
            sb.append((N.charAt(0) - '0') * 2 + (N.charAt(1) - '0'));

        // 나머지 경우
        for(int i = N.length() % 3; i < N.length(); i+=3) {
            sb.append((N.charAt(i) - '0') * 4 + (N.charAt(i+1) - '0') * 2
                    + (N.charAt(i+2) - '0'));
        }
        System.out.println(sb);


    }
}

풀이

2진수로 8진수를 구하기 위해서 3자리씩 끊어 계산해야한다.
2진수의 자릿수가 3의 배수이면 괜찮지만 그렇지 않을 때를 대비하여 아래 과정을 추가했다.

        // 세자리씩 끊었을 때 한 자리만 남았을 경우
        if(N.length() % 3 == 1)
            sb.append(N.charAt(0));

        // 세자리씩 끊었을 때 두 자리만 남았을 경우
        if(N.length() % 3 == 2)
            sb.append((N.charAt(0) - '0') * 2 + (N.charAt(1) - '0'));

*N.charAt(i) 에 '0'을 빼준 이유
N.charAt(i)가 문자 1일 때 아스키 코드값은 49이다. 문자 0의 아스키코드값은 48이므로 숫자 1을 만들기 위해 그 둘을 빼준다.

나머지 경우는 반복문을 3씩 돌아 세자리수씩 처리하도록 한다.

        // 나머지 경우
        for(int i = N.length() % 3; i < N.length(); i+=3) {
            sb.append((N.charAt(i) - '0') * 4 + (N.charAt(i+1) - '0') * 2
                    + (N.charAt(i+2) - '0'));
        }
profile
Back-End Developer

0개의 댓글