일반적인 진수 변환법을 적용해서 푸는데
음수/음수의 경우 발생하는 예외를 처리해주어야한다.
주석 참고
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
if (num == 0) {
System.out.println(0);
} else {
convert(num);
System.out.println();
}
}
/*
진수 변환법
2진수일 때,
10 = 2*5 + 0
5 = 2*2 + 1
2 = 2*1 + 0
1 = 2*0 + 1
이에 따라, 10을 2진수로 표현하면 1010이된다.
-2진수도 위와 같은 진수 변환법을 사용하면 된다.
다만 주의할 점은 음수/음수인 경우의 처리이다.
이 경우에만 나머지가 -1이 나오기 때문에 다르게 처리해주어야 한다.
(나머지를 1로 만들기 위해서는 몫이 1만큼 커져야함)
-13 = (-2)*7 + 1 이다.
그러나 -13/-2의 결과는 6이 나온다.
그러므로 -13-1/-2 처리를 해주어야 정상적인 7 값이 나온다.
-13 = -2*(7) + 1
7 = -2*(-3) + 1
-3 = -2*(2) + 1
2 = -2*(-1) + 0
-1 = -2*(1) + 1
1 = -2*(0) + 1
*/
public static void convert(int n) {
if (n == 0) return; // n이 0이면 변환 끝난 것임
if (n%2 == 0) { // n이 짝수이면
convert(n/-2);
System.out.print(0); // 2로 나누어 떨어지므로 0
} else { // n이 홀수이면
if (n>0) convert(n/-2);
else convert((n-1)/-2); // 음수/음수인 경우 -> 처리 필요
System.out.print(1); // 2로 나누어 떨어지지 않으므로 1
}
}
}
문제 출처 : www.acmicpc.net/problem/2089
'알고리즘 > 백준 알고리즘(JAVA)' 카테고리의 다른 글
Java)17103번 골드바흐 파티션 - 수학(소수, 골드바흐의 추측) (0) | 2020.09.03 |
---|---|
Java)11576번 Base Conversion (진법 변환) (0) | 2020.09.03 |
JAVA)1707번 이분 그래프 - DFS (0) | 2020.08.21 |
JAVA)11724번 연결 요소의 개수 - 그래프, DFS (0) | 2020.08.19 |
JAVA)DFS와 BFS - 그래프의 구현(인접 리스트), DFS, BFS (0) | 2020.08.19 |
알고리즘/백준 알고리즘(JAVA) 카테고리의 다른 글
Java)17103번 골드바흐 파티션 - 수학(소수, 골드바흐의 추측)
Java)11576번 Base Conversion (진법 변환)
JAVA)1707번 이분 그래프 - DFS
JAVA)11724번 연결 요소의 개수 - 그래프, DFS