본문 바로가기
코딩테스트 준비/백준 C#

백준 C# - 2089 +) 풀이

by 코딩하는 돼징 2023. 11. 22.
반응형

풀이

-2진법이란?

-2진법에서의 2의 거듭제곱은 사용하는 것처럼 -2진법에서는 -2의 거듭제곱이 사용된다.

-7을 예시로 보면 아래와 같이 표현할 수 있다.

 

그러므로 -2진수를 구하기 위해서는 2진수를 구했던 방법처럼 구하면 된다.

01 n이 0인 경우 처리

if (num == 0)
{
    Console.WriteLine("0");
    return;
}

02 n을 -2로 나눈 나머지를 구한다.

나머지는 -1,0,1중 하나이다. 그리고 이를 절댓값으로 만든다. 그리고 자릿값을 stringbuilder맨 앞에 넣어준다.

int remainder = Math.Abs(num % -2);
sb.Insert(0, remainder);

절댓값으로 표시하고 싶지 않은 경우 아래와 같이 작성할 수도 있다.

int remainder = num % -2;
sb.Insert(0, remainder < 0 ? 1 : remainder);

03 num값 업데이트

-2로 나눈 결과를 올림하여 정수로 변환한 값을 num에 대입한다.

num = (int)Math.Ceiling((double)num / -2);

왜 Math.Ceiling을 해주어야 하나요?

C#에서 나눗셈이 구할때 버림(Floor) 방식을 선택한다. 7.5인경우 7이 된다.

 

이러한 경우 때 정확한 결과가 나오지 않는다. -2진수를 정확하게 구하기 위해서는 Maht.Ceiling이 필요하다.

 


문제 예시

-13인 경우


코드 전문

using System;
using System.Text;

namespace baek2
{
    class Program
    {
        static void Main(string[] args)
        {
            int num = int.Parse(Console.ReadLine());
            StringBuilder sb = new StringBuilder();

            if (num == 0)
            {
                Console.WriteLine("0");
                return;
            }

            while(num!=0)
            {
                int remainder = Math.Abs(num % -2);
                sb.Insert(0, remainder);
                num = (int)Math.Ceiling((double)num / -2);
            }
            Console.Write(sb.ToString());
        }
    }
}
반응형

'코딩테스트 준비 > 백준 C#' 카테고리의 다른 글

백준 C# - 2745 +)풀이  (0) 2023.11.23
백준 C# - 11005 +)풀이  (0) 2023.11.22
백준 C# - 1212 +)풀이  (0) 2023.11.21
백준 C# - 1373 +) 풀이  (0) 2023.11.21
백준 C# - 17087 +) 풀이  (1) 2023.11.20

댓글