복대가리의 개발

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

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

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

문제링크

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

 

1373번: 2진수 8진수

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

www.acmicpc.net

 

문제

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

조건

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

입력

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

출력

첫째 줄에 주어진 수를 8진수로 변환하여 출력한다.

 

문제정리

1. 2진수의 3자리는 8진수로 변형이 가능합니다.

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

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

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

011 = 3  

001 = 1

100 = 4

011 001 100 = 314

 

여기서 주의 할점은 입력 받은 2진수의 값의 갯수가 3의 배수가 아니면 아래 수식으로는 문제가 생겨 맨 앞에 3의 배수가 되도록 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
static void Main(string[] args)
{
    //  https://bokhead.tistory.com/
    // 1373
    StreamWriter writer = new StreamWriter(OpenStandardOutput());
    StreamReader reader = new StreamReader(OpenStandardInput());
 
    string input = reader.ReadLine();
    int count = input.Length % 3;
 
    if (count != 0)
    {
        // 입력 받은 값을 3자리 씩 끊기 위해 맨 앞자리에 0을 붙여줍니다.
        for (int i = 0; i < 3 - count; i++)
            input = "0" + input;
    }
 
    for (int i = 0; i < input.Length; i += 3)
    {
        // 3자리씩 변형
        writer.Write((input[i] - '0'* 4 + (input[i + 1- '0'* 2 + (input[i + 2- '0'* 1);
    }
 
    writer.WriteLine();
 
    writer.Close();
    reader.Close();
}
cs

 

반대로 하는 경우에 대한 문제도 풀이되어있습니다.

https://bokhead.tistory.com/72

 

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

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

bokhead.tistory.com

 

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

 

728x90