알고리즘 공부/정렬(Sort) | 분류

백준 2089 (-2 진수)

kdhoooon 2021. 1. 1. 17:36

문제


-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, 11011, 11000, 11001 등이다.

10진법의 수를 입력 받아서 -2진수를 출력하는 프로그램을 작성하시오.

 

 

 

풀이


직접 손으로 풀어보니 마지막 나머지가 1이 될때 끝나는 것을 보았다.

 

10진법을 2진법을 바꾸는 상황에서 보통의 자연수 진법에서는 0이 되면 끝나게 재귀코드를 짰던것에서

1에서도 재귀함수를 끝내는 조건을 두게 하여 풀었다.

 

<코드>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class Main {	
	static StringBuilder sb = new StringBuilder();
	
	public static void main(String[] args) throws IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		//Scanner scanner = new Scanner(System.in);
		
		
		String[] num = br.readLine().split("\\s");
			
		int a = Integer.parseInt(num[0]);
		int b = -2;
		
		Converter(a, b);
		System.out.println(sb);
	}
	
	static void Converter(int a, int b) {
		
		if(a == 1 || a == 0) {
			sb.append(a);
			return;
		}
		
		if(a % b < 0) {
			Converter(a / b + 1 , b);
			sb.append(-1 * (a % b));
		}
		else {
			Converter(a/b, b);
			sb.append(a % b);
		}
		
		
	}
	
}

'알고리즘 공부 > 정렬(Sort) | 분류' 카테고리의 다른 글

백준 6588 (골드바흐의 추측)  (0) 2021.01.03
백준 1978 ( 소수 찾기)  (0) 2021.01.01
백준 1850(최대공약수)  (0) 2020.12.31
백준 1934(최소공배수)  (0) 2020.12.29
백준 1158(요세푸스 문제)  (0) 2020.12.29