- 생각
-2진법 문제는 그냥 2진법으로 바꾸는 것처럼 풀면 될 것 같다. 단, 나누기와 나머지 연산할 때 -2를 해줘야한다는 것, 또한 나머지 연산할 때는 몫을 버리는 것이 아닌 올림을 해줘야한다.
새로운 방법(클릭하면 링크)
- 코드
정답 코드 : 나머지를 list에 넣어둔 뒤 뒤에서부터 StringBuilder에 append시켜준다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
static int N;
static StringBuilder sb;
public static void main(String[] args) throws Exception {
SetData();
System.out.println(sb);
}
private static void SetData() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
sb = new StringBuilder();
ArrayList<Integer> list = new ArrayList<>();
if(N==0) {
System.out.println(N);
System.exit(0);
}
while(N!=0) {
list.add(Math.abs(N%-2));
N=(int)Math.ceil((double)N/-2);
}
for(int i=list.size()-1; i>=0; i--) // 반복문에서 한번씩 출력해주는 방법보다 빠름
sb.append(list.get(i));
}
}
'algorithm' 카테고리의 다른 글
[JAVA] 백준 11399번 : ATM (0) | 2020.12.04 |
---|---|
[JAVA] 백준 3036번 : 링 (0) | 2020.12.03 |
[JAVA] 백준 15965번 : K번째 소수 (0) | 2020.12.02 |
[JAVA] 백준 4796번 : 캠핑 (0) | 2020.12.02 |
[JAVA] 백준 1292번 : 쉽게 푸는 문제 (0) | 2020.12.01 |