더 많이 실패하기

공부 114일차: 백준 2089번 -2진수 자바 java 본문

알고리즘/백준

공부 114일차: 백준 2089번 -2진수 자바 java

김발자~ 2022. 11. 21. 22:28
반응형

2089 -2진수

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

 

2089번: -2진수

-2진법은 부호 없는 2진수로 표현이 된다. 2진법에서는 20, 21, 22, 23이 표현 되지만 -2진법에서는 (-2)0 = 1, (-2)1 = -2, (-2)2 = 4, (-2)3 = -8을 표현한다. 10진수로 1부터 표현하자면 1, 110, 111, 100, 101, 11010, 110

www.acmicpc.net

 

 

 


백준 2089번 문제 -2진수


문제


 

 

 


과정 생각해보기 & 오답


 

누르면 이미지 출처로 이동

우선 -2진수를 구현하기 전에, 10진수를 2진수로 바꾸는 방법에 대해 알아봐야 한다

그림에서 보는 것처럼 주어진 10진수를 계속해서 2로 나눈 후, 몫이 2보다 작아지면 몫과 지금까지의 나머지를 순서대로 적는다

10진수를 8진수로 변환할 때도 주어진 10진수를 계속 8로 나눈다

 

즉, -2진수는 주어진 숫자를 계속 -2로 나누어야 한다는 소리가 된다

-2로 나누고 몫은 올림을 해야 하는데, 그림에서처럼 음수일 때는 올림을 해야 원하는 결과를 얻을 수 있기 때문이다

 

이렇게 몫과 나머지를 다 구한 후엔 2진수를 구하는 그림의 화살표처럼 뒤집어서 출력한다

 

 


정답 인정 코드


 

https://bellossimo.tistory.com/56

이 블로그를 참고했다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package codingtestAndAlgorithm;
 
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();
        
        int n = Integer.parseInt(br.readLine());
        
        if(n == 0) {
            System.out.println(0);
        }else {
            while(n != 1) {
                // 10진수 -> n진수 : n으로 계속 나눈다
                sb.append(Math.abs(n % -2));    //나머지는 양수여야 한다 -> 절대값
                n = (int)Math.ceil((double)n / -2);
                // -2.4가 있을 때, 올림해야 -2가 된다 (내림하면 -3으로 원하지 않는 결과가 나옴)
            }
            
            sb.append(n);
            System.out.println(sb.reverse());
        }
    }
    
}
 
cs

 

 

 


반응형
Comments