[백준 12174] #include <Google I/O.h> (C#, C++) - soo:bak
작성일 :
문제 링크
12174번 - #include <Google I/O.h>
설명
I와 O로 이루어진 8비트 문자열을 아스키 코드로 변환해 원래 메시지를 출력하는 문제입니다.
접근법
I는 1, O는 0으로 보고 8글자씩 끊어 이진수를 만듭니다.
각 8비트 값을 문자로 변환해 이어 붙이면 됩니다.
Code
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
using System;
using System.Text;
class Program {
static void Main() {
var parts = Console.In.ReadToEnd().Split();
var idx = 0;
var t = int.Parse(parts[idx++]);
var outSb = new StringBuilder();
for (var caseNo = 1; caseNo <= t; caseNo++) {
var b = int.Parse(parts[idx++]);
var s = parts[idx++];
var sb = new StringBuilder();
for (var i = 0; i < b; i++) {
var val = 0;
for (var j = 0; j < 8; j++)
val = val * 2 + (s[i * 8 + j] == 'I' ? 1 : 0);
sb.Append((char)val);
}
outSb.AppendLine($"Case #{caseNo}: {sb}");
}
Console.Write(outSb);
}
}
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t; cin >> t;
for (int caseNo = 1; caseNo <= t; caseNo++) {
int b; cin >> b;
string s; cin >> s;
string res;
res.reserve(b);
for (int i = 0; i < b; i++) {
int val = 0;
for (int j = 0; j < 8; j++)
val = val * 2 + (s[i * 8 + j] == 'I' ? 1 : 0);
res.push_back(char(val));
}
cout << "Case #" << caseNo << ": " << res << "\n";
}
return 0;
}