https://www.acmicpc.net/problem/2089
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){
sb.append(Math.abs(n % -2));
n = (int)Math.ceil((double)n/(-2));
}
sb.append(n);
System.out.println(sb.reverse());
}
}
}
음수를 어떻게 표현해야할지 모르겠어서 다른 블로그를 참고했다.
문제에서 주어진 -13으로 생각해보면,
-13 = (-2 * 7) + 1
7 = (-2 * -3) + 1
-3 = (-2 * 2) + 1
2 = (-2 * -1) + 0
-1 = (-2 * 1) + 1
이런식으로 진행된다.
일반 이진법이랑 비슷하게 입력받은 수를 -2로 나누면서 그 나머지를 구하면된다.
주의해야할 점은 이진법으로 표현할 나머지는 항상 양수이므로 절댓값을 취해주고, 몫은 올림처리 해주어야 한다.
참고: https://bellossimo.tistory.com/56
'ALGORITHM' 카테고리의 다른 글
[JAVA] 알고리즘 : 동적 계획법- 돌다리 건너기 (0) | 2022.10.24 |
---|---|
[JAVA] 알고리즘 : 동적 계획법- 계단 오르기 (0) | 2022.10.24 |
[JAVA] 백준 17103번- 골든바흐 파티션 (0) | 2022.10.21 |
[JAVA] 백준 1373번- 2진수 8진수 (0) | 2022.10.21 |
[JAVA] 백준 17087번- 숨바꼭질 6 (0) | 2022.10.21 |