[백준] -2진수

2024. 10. 3. 18:02·코딩테스트 연습/백준
728x90

 

문제

-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진수를 출력하는 프로그램을 작성하시오.

 

입력

첫 줄에 10진법으로 표현된 수 N이 주어진다.

 

출력

-2진법 수를 출력한다.

 

제한

  • -2,000,000,000 ≤ N ≤ 2,000,000,000

풀이

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        // N이 0이면 그대로 0 출력
        if(N == 0) {
            System.out.println(0);
            return;
        }

        StringBuilder sb = new StringBuilder();
        while (N != 0) {
            int remainder = N % -2;     // 나머지
            N /= -2;

            // 나머지가 -1인 경우 1로 변경
            if (remainder < 0) {
                remainder += 2;
                N++;    // 2로 나누어 떨어지지 않았기 때문에 정수 나눗셈을 고려하여 나머지 추가
            }

            sb.append(remainder);
        }

        System.out.println(sb.reverse());

        br.close();
    }
}

 

-2진수는 우리가 알고 있는 2진수와 비슷하게 각 자리를 -2의 거듭제곱으로 표현한다. 문제에서 제시된 예를 토대로 설명해보자면, -6을 -2진수로 표현하면 11010이 된다. 아래 표를 보자.

(-2)⁵ (-2)⁴ (-2)³ (-2)² (-2)¹
1 1 0 1 0

 

-2의 거듭제곱을 토대로 -2의 제곱이나 네제곱 자리는 양수가 된다. 따라서 이를 계산하면

“16+(−8)+0+(−2)+0=16−8−2=6”

형태가 된다.

 

작성한 코드는 주어진 수를 -2로 나눴을 때 나머지를 기준으로 구분한다. 나머지가 -1인 경우 1로 변경한다. 이는 나머지가 0 또는 1일 때를 취급하기 때문이다. 이는 곧 절댓값이 2로 나누어 떨어지는지 확인하는 과정을 말한다. 음수로 나온 나머지를 보정했기 때문에 이를 반영하여 몫에 반영한다. 2진수 계산과 마찬가지로 계산한 나머지를 reverse() 하여 출력한다.

 

 

출처: 백준, https://www.acmicpc.net/problem/2089
728x90
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 연습 > 백준' 카테고리의 다른 글

[백준] 서울 지하철 2호선  (0) 2024.12.01
[백준] 정수 삼각형  (0) 2024.10.16
[백준] 불!  (0) 2024.07.11
[백준] 그림  (0) 2024.07.06
[백준] 스택 수열  (0) 2024.07.04
'코딩테스트 연습/백준' 카테고리의 다른 글
  • [백준] 서울 지하철 2호선
  • [백준] 정수 삼각형
  • [백준] 불!
  • [백준] 그림
hxxzz
hxxzz
개발새발 안 되게 개발 노력 중
  • hxxzz
    개발새발
    hxxzz
  • 전체
    오늘
    어제
    • 분류 전체보기 (104)
      • Java (3)
      • Back-End (9)
        • Spring Boot (7)
        • DevOps (1)
        • Redis (1)
      • Computer Scrience (4)
        • Data Structrue (4)
        • Algorithm (0)
      • SQLD (3)
      • 코딩테스트 연습 (85)
        • Programmers (30)
        • 백준 (15)
        • etc. (0)
        • 99클럽 (40)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    99클럽
    SQL
    jpa
    스택
    redission
    코딩테스트 준비
    LeetCode
    java
    dfs
    개발자 취업
    til
    N+1 문제
    SpringBoot
    자료구조
    Stack
    Spring Boot
    SQLD
    BFS
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
hxxzz
[백준] -2진수
상단으로

티스토리툴바