알고리즘/백준
공부 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 |
반응형