반응형
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#' 카테고리의 다른 글
백준 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 |
댓글