https://www.acmicpc.net/problem/2089
방법 1: 나머지 정리 이용
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
|
import java.io.*;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int Decimal = Integer.parseInt(br.readLine());
while (true) {
int rest = Decimal % -2;
rest = (rest < 0) ? rest * -1 : rest;
sb.append(rest);
Decimal = (Decimal - rest) / -2;
if (Decimal == 0) {
break;
}
}
System.out.println(sb.reverse());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Colored by Color Scripter
|
방법 2: -2진법 구현
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#include <iostream>
#include <stack>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
// 0일경우 예외처리
if (n == 0)
{
cout << 0;
return 0;
}
stack<int> s_mbin;
while (n != 0)
{
int quot = n / -2;
// 나머지가 없을 때
if (n % -2 == 0)
{
s_mbin.push(0);
n = quot;
}
// 나머지가 있을 때
else
{
// ex) -13 / -2 = 6 ... 1 인데,
// -2 * (6 + 1) + 1 = -13 처럼 원상복귀 할때 몫에 1이 더 필요한 경우
if (n < 0)
{
n = quot + 1;
}
// ex) 7 / -2 = -3 ... 1 인데,
// -2 * -3 + 1 = 7의 경우
else
{
n = quot;
}
s_mbin.push(1);
}
}
while (!s_mbin.empty())
{
cout << s_mbin.top();
s_mbin.pop();
}
return 0;
}
Colored by Color Scripter
|
아무래도 방법 2가 더 간단하다 ㅎㅎ
TIP1 - 방법2
숫자 N을 -2로 나눴을 때, 나머지가 발생하는 케이스가 2가지로 나뉜다.
1. 숫자 N이 음수. 그리고 몫 * -2 + 1이 숫자 N과 -2 차이날때.
2. 숫자 N이 양수. 그리고 몫 * -2 + 1이 그대로 숫자 N일때.
결국 간단하게 N의 음수/양수 여부로 분개를 칠 수 있다.
1번 케이스는 나뉘어지는 수가 음수라서 발생하는 케이스.
TIP2
방법 1은 다음과 같은 나머지 정리를 이용한다
숫자 N 을 X로 나눠서 나머지가 발생할 때마다 답안에 집어넣기
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ]11005번: 진법 변환 2(java, c++) (0) | 2019.09.25 |
---|---|
[BOJ]17103번: 골드바흐 파티션(java, c++) (0) | 2019.09.24 |
[BOJ]1212번: 8진수 2진수(java, c++) (0) | 2019.09.23 |
[BOJ]1373번: 2진수 8진수(java, c++) (0) | 2019.09.23 |
[BOJ]17087번: 숨바꼭질 6(java, c++) (0) | 2019.09.23 |
댓글