작성일 :

문제 링크

2998번 - 8진수

설명

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;
}