본문 바로가기

Algorithm

백준 2089 -2진수 Java

그냥 2진법으로 바꾸는 문제가 아닌

-2진법으로 바꾸는 문제이다.

 

-2진법 문제는 그냥 2진법으로 바꿀 때 처럼 똑같이 풀면 된다.

다른점이 있다면 나머지 연산과 나누기 연산을 할때 -2를 해줘야 한다는 점과

나머지 연산을 할때 몫을 버림이 아닌 올림을 해줘야 한다는 점이다.

예를 들어 

7/3 = 2 지만

7/-3 = 3이 라는 말이다.

 

왜 그런지 열심히 검색해봤지만 뚜렷한 이유를 알 수 없었다.

그냥 그렇다고 암기해야 겠다.

 

암튼 이렇게 해서 나머지를 구한 다음에 2진법을 구할 때 처럼

역순으로 출력해주면 된다.

 

Math.ceil()메소드를 통해 올림을 처리하였다.

n이 0일땐 따로 처리를 해줘야 한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        List<Integer> list = new ArrayList<>();
        
        if(n==0//n이 0 일때
            System.out.println(n);
    
        while(n!=0) {
            list.add(Math.abs(n%-2));
            n=(int)Math.ceil((double)n/-2);
        }
        
        for(int i=list.size()-1; i>=0; i--)
            System.out.print(list.get(i));
    }