반응형
풀이
-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 |
댓글