[BOJ][C#] 1373 2진수 8진수

LimJaeJun·2023년 11월 25일
0

PS/BOJ

목록 보기
48/108

📕 문제

📌 링크

📗 접근 방식

입력으로 주어진 2진수를 오른쪽부터 3자리씩 묶어서 8진수로 변환

  • 주어진 2진수를 오른쪽부터 3자리씩 묶어서 해당 8진수의 한 자리를 구한다
  • 구한 8진수를 왼쪽부터 차례로 연결하여 결과를 출력

📘 코드

내가 직접 푼 코드

using System.Text;

namespace BOJ_1373
{
    class Program
    {
        static readonly char one = '1';
        static readonly int count = 3;
        
        static void Main()
        {
            StringBuilder sb = new StringBuilder();
            string s = Console.ReadLine();
            int length = s.Length % 3 == 0 ? s.Length / 3 : s.Length / 3 + 1;
            int[] array = new int[length];
            for (int i = 0; i < length; i++)
            {
                array[i] = 0;
            }
            int index = length - 1;

            int tmp = 1;
            for (int i = s.Length - 1; i >= 0; i--)
            {
                if (tmp > 3)
                {
                    index--;
                    tmp = 1;
                }
                
                if (s[i].Equals(one))
                {
                    array[index] += (int)Math.Pow(2, (tmp - 1));
                }

                tmp++;
            }

            for (int i = 0; i < length; i++)
            {
                sb.Append(array[i]);
            }

            Console.WriteLine(sb);
        }
    }
}

참고한 코드

using System.Text;

namespace BOJ_1373
{
    class Program
    {
        static void Main()
        {
            StringBuilder sb = new StringBuilder();
            string s = Console.ReadLine();

            int length = s.Length;
            int temp = length % 3;
            int i = 0;
            switch (temp)
            {
                case 1:
                    sb.Append(s[0]);
                    i = 1;
                    break;
                case 2:
                    sb.Append((s[0] - '0') * 2 + (s[1] - '0'));
                    i = 2;
                    break;
            }

            for (; i < length; i += 3)
            {
                sb.Append((s[i] - '0') * 4 + (s[i + 1] - '0') * 2 + (s[i + 2] - '0'));
            }

            Console.WriteLine(sb);
        }
    }
}

📙 오답노트

int로 받고 Convert.ToString를 이용해보고 string으로 입력받아 Math.Pow를 이용하여 진수 변환을 시도하였지만 실패하였다.

내 방식이 잘못 되었나 싶어 다른 사람의 코드를 참고하여 제출해보았지만 그것도 시간초과가 떴다.
예전에 Console.WriteLine이 아니라 StringBuilder에 담아 Console.WriteLine을 한번만 호출하고 출력하면 시간이 단축되어 통과했었던 생각이 나서 StringBuilder에 담는 로직만 추가하여 제출해보니 맞았다.

내 코드도 StringBuilder에 담는 로직을 추가하여 제출하였더니 정답이라고 떴다.
참고링크

📒 알고리즘 분류

  • 수학
  • 문자열
profile
Dreams Come True

0개의 댓글

관련 채용 정보