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

백준 C# - 1373 +) 풀이

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

1. 첫번째 방법

2진수를 8진수로 바꾸는 문제여서 간단하게 아래와 같이 풀었다. 이렇게 풀었더니 overflow에러가 떴다..

string num = Console.ReadLine();
string result = Convert.ToString(Convert.ToInt32(num, 2), 8);
Console.WriteLine(result);

문제를 다시 일어보니 2진수가 1,000,000까지 입력되니까 생기는 이유같았다.


2. 두번째 방법

아래 그림과 같이 이진수를 3배수로 만들고 3개씩 묶어 8진수로 바꾸면된다.

01 2진수 3배수로 만들기

2진수가 3배수가 아닌 경우 앞에 0을 붙이면서 3배수로 만들기

if (num.Length % 3 != 0)
{
    for (int i = 0; i < 3 - count; i++)
        num = "0" + num ;
}

02 3개씩 묶어 8진수로 만들기

for(int i = 0; i< num.Length;i +=3)
{
    sb.Append(int.Parse(num[i].ToString()) * 4 + int.Parse(num[i + 1].ToString()) * 2 + int.Parse(num[i + 2].ToString()));
}

03 StringBuilder 사용하기

처음에 string을 이용해서 구했는데 메모리초과가 나왔다. StringBuilder를 사용하자


코드 전문

using System;
using System.Text;

namespace baek2
{

    class Program
    {
        static void Main(string[] args)
        {
            string num = Console.ReadLine();
            int count = num.Length % 3;
            StringBuilder sb = new StringBuilder();
            
            if (num.Length % 3 != 0)
            {
                for (int i = 0; i < 3 - count; i++)
                    num ="0"+num ;
            }

            for(int i = 0; i< num.Length;i +=3)
            {
                sb.Append(int.Parse(num[i].ToString()) * 4 + int.Parse(num[i + 1].ToString()) * 2 + int.Parse(num[i + 2].ToString()));
            }
            Console.WriteLine(sb.ToString());
        }
    }
}

8진수를 2진수로 변환하는 문제 풀어보러 가기

백준 C# - 1212

 

백준 C# - 1212 +)풀이

비슷한 문제인 2진수를 8진수로 바꾸는 문제를 먼저 풀고 오는 것을 추천한다. 백준 C# - 1373 백준 C# - 1373 +) 풀이 1. 첫번째 방법 2진수를 8진수로 바꾸는 문제여서 간단하게 아래와 같이 풀었다.

code-piggy.tistory.com

 

 

반응형

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

백준 C# - 2089 +) 풀이  (0) 2023.11.22
백준 C# - 1212 +)풀이  (0) 2023.11.21
백준 C# - 17087 +) 풀이  (1) 2023.11.20
백준 C# - 9613 +) 풀이 (유클리드 호제법)  (0) 2023.11.18
백준 C# - 2004 +) 풀이  (0) 2023.11.06

댓글