[백준]-2진수_2089

정원석·2024년 4월 3일

문제

풀이

오래 고민을 해봤지만 도저히 풀리지 않아서 구글 검색을 하며 이해를 했다. 이해한 것을 잊어버리지 않기 위해 작성한다. 새로 알게된 메서드도 잘 기억해두자.
-2진수를 구하는 방법은 -13을 예시로 들면

  • -13 = (-2*7)+1
  • 7 = (-2*-3)+1
  • -3 = (-2*2)+1
  • 2 = (-2*-1)+0
  • -1 = (-2*1)+1
  • 1

으로 나타낼 수 있다. 그러므로 -13의 결과는 110111이다. 이것은 -2로 나눴을 때 몫을 반올림한 값이 다음에 나워지는것을 알 수 있다.
ex) -13/-2=6.5 -> 7
7/-2=-3.5 -> -3

코드

import java.io.*;

public class beak_2089 {
    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){
            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());
    }
}

새로 알게된 메서드

Math.abs(~~~);
받는 인자값을 절댓값을 씌운 후 리턴한다.

Math.ceil(~~~);
괄호 안의 숫자를 가장 가까운 더 큰 정수로 올림한다. 예를들면 Math.ceil(3.1)은 4가 되고 Math.ceil(-1.6)은 -1이 된다.

profile
Back-End-Dev

0개의 댓글