복대가리의 개발

[C#] 백준 (알고리즘)/브론즈 문제

[백준 - C#] 1212번 8진수 2진수

복대가리 2022. 8. 17. 19:45
728x90

문제링크

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

 

1212번: 8진수 2진수

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

www.acmicpc.net

 

문제

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

조건

시간제한 : 2초
메모리 제한 : 128 MB

입력

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

출력

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

 

문제정리

1. 8진수의 한자리는 3자리의 2진수로 변경이 가능합니다. 2^3 = 8
2. 맨 앞자리는 항상 1이어야 합니다.

이번 문제의 경우 8진수를 2진수로 변경하는 문제입니다.  c#에서 제공하는 내부 함수를 이용해도 되지만 그렇게 하지 않았습니다.

8진수의 경우 자리 하나당 3자리의 2진수로 변경이 가능합니다. 

예를들어 314의 경우 아래와 같이 변경을 할 수가 있습니다.

3 = 011

1 = 001

4 = 100

314 = 011 001 100 

 

변경이 끝났다면 앞자리가 무조건 1이기 때문에 0이 아닌 1이 나올때까지 0을 제거해주면 되는 문제입니다.

 

그런데,, 여기서 끝났다고 생각하고 문제를 제출하였는데 틀렸습니다. 

그 이유가 0을 입력 받게 되면 000으로 변형되어 0을 다 제거하기때문에 문제가 생겼기 때문에 체크하는 반복문을 돌기전에 입력 받은 값이 0이면 0을 출력하도록 조건하나 추가하였습니다.

C# 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
static void Main(string[] args)
{
    //  https://bokhead.tistory.com/
    // 1212
    StreamWriter writer = new StreamWriter(OpenStandardOutput());
    StreamReader reader = new StreamReader(OpenStandardInput());
 
    StringBuilder builder = new StringBuilder();
 
    string[] binary = { "000""001""010""011""100""101""110""111" };
 
    char[] input = reader.ReadLine().ToCharArray(); // 8진수
 
    if (input[0== '0'// 입력이 0인경우 바로 0으로 출력
    {
        builder.Append(0);
    }
    else
    {
        for (int i = 0; i < input.Length; i++)
        {
            int num = int.Parse(input[i].ToString());
            builder.Append(binary[num]);  // 한자리씩 읽어들여 2진수 3자리로 변형
        }
 
        while (true)
        {
            if (builder[0== '0'// 맨 앞자리가 0이 아닐 때까지 제거
                builder.Remove(01);
            else
                break;
        }
    }
 
    writer.WriteLine(builder);
 
    writer.Close();
    reader.Close();
}
cs

 

반대의 경우 문제 풀이도 되어있습니다.

https://bokhead.tistory.com/73

 

[백준 - C#] 1373번 2진수 8진수

문제링크 https://www.acmicpc.net/problem/1373 1373번: 2진수 8진수 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다. www.acmicpc.net 문제 2진수가 주어졌을 때, 8진수로 변환하..

bokhead.tistory.com

 

읽어주셔서 감사합니다 오늘도 즐거운 하루 되세요.

 

728x90