[백준 9791] Encoding Binary Numbers (C#, C++) - soo:bak
작성일 :
문제 링크
9791번 - Encoding Binary Numbers
설명
이진수 문자열을 연속된 같은 숫자의 길이와 그 숫자를 번갈아 적어 십진수 문자열로 만드는 문제입니다.
접근법
같은 숫자가 이어지는 구간을 왼쪽부터 읽어, 각 구간의 길이와 숫자를 차례로 적는 런-길이 인코딩으로 결과 문자열을 만듭니다.
예를 들어 1111000은 4 1 3 0으로 변환됩니다.
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
using System;
using System.Text;
class Program {
static void Main() {
string? line;
while ((line = Console.ReadLine()) != null) {
if (line == "0") break;
var sb = new StringBuilder();
int n = line.Length;
int cnt = 1;
for (int i = 1; i <= n; i++) {
if (i < n && line[i] == line[i - 1]) {
cnt++;
} else {
sb.Append(cnt).Append(line[i - 1]);
cnt = 1;
}
}
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s;
while (cin >> s) {
if (s == "0") break;
string out;
int n = s.size();
int cnt = 1;
for (int i = 1; i <= n; i++) {
if (i < n && s[i] == s[i - 1]) {
cnt++;
} else {
out += to_string(cnt);
out.push_back(s[i - 1]);
cnt = 1;
}
}
cout << out << "\n";
}
return 0;
}