본문 바로가기
코딩테스트 준비/백준

[백준] 2089번 - -2진수 [Java]

by mwzz6 2025. 3. 12.

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

 

[백준] 2089번 - -2진수 [Java]


1.  아이디어

 

음수로 진법 변환은 양수로 진법 변환과 기본 원리는 동일한데 나머지가 항상 양수가 되도록 조절만 해주면 된다.


2. 문제풀이

 

진법 변환을 위해 몫과 나머지를 구하는 과정에서 나머지가 음수가 되면 몫을 하나 더 크게 잡고 나머지를 양수로 만드는 과정을 반복하면 된다. 0이 입력으로 주어질 수 있음에 주의해야 한다.


3. 코드

 

import java.io.*;

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

        int N = Integer.parseInt(br.readLine());

        if (N == 0) {
            sb.append(0);
        } else {
            while (N != 0) {
                int q = N / -2;
                int r = N % -2;

                if (r < 0) {
                    q += 1;
                    r += 2;
                }

                sb.append(r);

                N = q;
            }
        }

        bw.write(sb.reverse().toString());
        bw.flush();
    }
}

4. 후기