728x90
문제링크
https://www.acmicpc.net/problem/1373
문제
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
읽어주셔서 감사합니다 오늘도 즐거운 하루 되세요.
728x90
'[C#] 백준 (알고리즘) > 브론즈 문제' 카테고리의 다른 글
[백준 - C#] 1252번 이진수 덧셈 (6) | 2022.09.01 |
---|---|
[백준 - C#] 1333번 부재중 전화 (0) | 2022.08.30 |
[백준 - C#] 1212번 8진수 2진수 (0) | 2022.08.17 |
[백준 - C#] 4796번 캠핑 (0) | 2022.08.08 |
[백준 - C#] 14720번 이장님 초대 (0) | 2022.08.01 |