입력으로 주어진 2진수를 오른쪽부터 3자리씩 묶어서 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에 담는 로직을 추가하여 제출하였더니 정답이라고 떴다.
참고링크
수학
문자열