728x90
문제링크
https://www.acmicpc.net/problem/1212
문제
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(0, 1);
else
break;
}
}
writer.WriteLine(builder);
writer.Close();
reader.Close();
}
|
cs |
반대의 경우 문제 풀이도 되어있습니다.
https://bokhead.tistory.com/73
읽어주셔서 감사합니다 오늘도 즐거운 하루 되세요.
728x90
'[C#] 백준 (알고리즘) > 브론즈 문제' 카테고리의 다른 글
[백준 - C#] 1333번 부재중 전화 (0) | 2022.08.30 |
---|---|
[백준 - C#] 1373번 2진수 8진수 (0) | 2022.08.17 |
[백준 - C#] 4796번 캠핑 (0) | 2022.08.08 |
[백준 - C#] 14720번 이장님 초대 (0) | 2022.08.01 |
[백준 - C#] 14659번 한조서열정리하고옴 (0) | 2022.07.31 |