공부하기/백준

[Java] 백준 풀기 2089 - -2진수

XEV 2024. 1. 31. 23:02

자바 백준 2089번

실버 2

https://www.acmicpc.net/problem/2089

 

2089번: -2진수

-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, 110

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 수학, 정수론

 

 

 

 

 

코드 보기

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int n = sc.nextInt();
        
        // 주어진 10진수를 -2진수로 변환하여 결과를 출력
        String result = decimalToNegativeBinary(n);
        
        System.out.println(result);
    }
    
    // 주어진 10진수를 -2진수로 변환하는 함수
    private static String decimalToNegativeBinary(int n) {
        // 10진수가 0이면 -2진수로 0을 반환
        if (n == 0) {
            return "0";
        }
        
        // 결과를 저장할 StringBuilder 객체 생성
        StringBuilder result = new StringBuilder();
        
        // 10진수를 -2진수로 변환하는 과정
        while (n != 0) {
            // 현재의 나머지 계산
            int remainder = n % -2;
            // 몫 계산
            n /= -2;
            
            // 음수의 경우 나머지가 음수이면 2를 더해주고 몫에 1을 더해주는 보정
            if (remainder < 0) {
                remainder += 2;
                n += 1;
            }
            
            // 나머지를 결과 문자열의 맨 앞에 추가하여 역순으로 저장
            result.insert(0, remainder);
        }
        
        // 최종 결과를 문자열로 반환
        return result.toString();
    }
    
}