[BAEKJOON] 백준 1212: 8진수 2진수(C#)

2024. 5. 5. 10:46IT/BaekJoon

문제 링크

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

 

 

문제

8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.

 

 

입력

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

 

 

출력

첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.

 

 

통과한 답안

using System.Text;

namespace _1212
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine();

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

            StringBuilder sb = new StringBuilder();
            foreach (char c in input)
            {
                int octDigit = c - '0';
                string binaryStr = Convert.ToString(octDigit, 2);

                if (sb.Length > 0)
                {
                    binaryStr = binaryStr.PadLeft(3, '0');
                }

                sb.Append(binaryStr);
            }
            Console.WriteLine(sb.ToString());            
        }
    }
}

 

8진수의 숫자를 2진수의 숫자로 변환하는 문제로,

C#에서는 Convert.ToString(number, 2)의 방식으로 number를 2진수로 변환할 수 있다.

 

이 문제에서 주의해야되는 부분은 숫자들의 자리수에 관한 부분인데,

8진수의 숫자를 2진수로 나타내는 과정에서

8진수의 숫자 1개는 2진수의 세자리를 차지하므로,

if (sb.Length > 0)
{
    binaryStr = binaryStr.PadLeft(3, '0');
}

 

위의 PadLeft를 통해서 3자리가 아닌 2진수의 숫자를 3자리로 만드는 과정을 거쳐주었다.

 

이전에 콘솔 게임을 만드는 과정에서 자간을 맞추기 위해 사용했던 Pad를 다시 사용할 줄 몰랐는데

자리수를 맞추는 과정에서 이를 기억해내서 사용하게 다.