(JAVA)백준온라인 1373번 - 2진수 8진수

2023. 8. 23. 07:45백준온라인

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

이 문제 같은 경우는 2진수가 주어지고 나서 3개씩 끊어줬을 때 1개가 남거나 2개가 남는 조건에 그에 맞는 계산을 해주고 나머지는 반복문을 이용하여 계산을 해준다

일단 2진수가 만약 1010011일 경우 3개씩 끊어준다 함은 1 / 010 / 011 로 끊고 각 칸에 맞게 계산을 한다면? 

2^0*1 / 2^2*0 + 2^1*1 + 2^0*0 / 2^2*0 + 2^1*1 + 2^0*1 

=  1 / 0 + 2 + 0 / 0 + 2 + 1

= 1/2/3

= 123이다!

이 원리를 기반으로 코딩을 한다

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));
        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);


    }

}