[백준, 자바] 2089번 - -2진수

jinvicky·2024년 4월 12일
0

ALG

목록 보기
25/62

난 -2진법이라길래 2진법으로 이루어진 수의 보수를 구하는 것이라고 생각했다.
그래서 2진법을 -2진법으로 바꾸기 위해서 보수를 만드는 과정을 찾아봤었다.
그 과정에서 시프트 연산자 ~ >> 등도 찾아보고 했는데, 예시 답안에 전혀 근접할 수 없었다.

결과
포기. 문제 의도도 이해가 안 가고 이게 진법인가? 의문도 드는 난해한 문제.

근데 그냥 2로 나누는 게 아니라 -2로 나누는 것인데, 그 경우의 수가 음수와 0이 추가되어 까다로워진 것 뿐이었다.

골치가 아프다. 이게 공식이 아니라 그냥 문제풀이로 만든 거겠지..?

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));
        int N = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();

        if (N == 0) { // 0인 경우 0을 그대로 붙인다.
            sb.append(0);
        } else {
            while (N != 1) {
                sb.append(Math.abs(N % -2));
                N = (int)(Math.ceil((double)N/-2));
            }
            sb.append(N);
        }
        System.out.println(sb.reverse());
    }
}

아래가 제일 설명을 잘했는데 이거 보고도 모르겠음

https://programming-beard.tistory.com/107

문제 링크

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

profile
일단 쓰고 본다

0개의 댓글