[백준 2998] 8진수 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
2진수가 주어졌을 때, 이를 3자리씩 묶어 8진수로 변환하는 문제입니다.
입력으로 주어지는 이진수는 1
로 시작하며, 길이는 최대 100
자리입니다.
정확한 변환을 위해 맨 앞에 0
을 적절히 붙여 길이가 3
으로 나누어떨어지도록 만든 후, 각각의 3비트 그룹을 8진수로 바꿔 출력합니다.
접근법
- 먼저 2진수 전체를 입력받습니다.
- 입력값의 앞에
0
을 추가하여 길이를3
으로 나누어떨어지게 만듭니다. - 3글자씩 잘라가며 8진수 값으로 변환한 결과를 차례대로 출력합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Text;
class Program {
static void Main() {
var bin = Console.ReadLine();
while (bin.Length % 3 != 0)
bin = "0" + bin;
var sb = new StringBuilder();
for (int i = 0; i < bin.Length; i += 3) {
string chunk = bin.Substring(i, 3);
int value = Convert.ToInt32(chunk, 2);
sb.Append(value);
}
Console.WriteLine(sb.ToString());
}
}
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
#include <bits/stdc++.h>
using namespace std;
typedef deque<char> dc;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
dc dq;
char c;
while (cin >> c) dq.push_back(c);
int n = dq.size();
while (n % 3) dq.push_front('0'), n++;
for (int i = 0; i < n; i += 3) {
string s = {dq[i], dq[i + 1], dq[i + 2]};
if (s == "000") cout << 0;
else if (s == "001") cout << 1;
else if (s == "010") cout << 2;
else if (s == "011") cout << 3;
else if (s == "100") cout << 4;
else if (s == "101") cout << 5;
else if (s == "110") cout << 6;
else cout << 7;
}
cout << "\n";
return 0;
}