[백준 20733] Triple Texting (C#, C++) - soo:bak
작성일 :
문제 링크
설명
어떤 단어를 3번 이어붙인 문자열에서 최대 한 글자가 다른 문자로 바뀌어 전달됩니다. 원래 단어를 복원해 출력하는 문제입니다.
접근법
문자열 길이를 3으로 나누면 원래 단어의 길이가 됩니다. 각 위치에서 세 번 반복된 문자 중 다수결로 원문 문자를 결정합니다.
세 문자가 모두 같으면 그대로 사용하고, 하나만 다르면 나머지 둘이 같은 문자가 정답입니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Text;
class Program {
static void Main() {
var s = Console.ReadLine()!;
var n = s.Length / 3;
var sb = new StringBuilder();
for (var i = 0; i < n; i++) {
char a = s[i], b = s[i + n], c = s[i + 2 * n];
if (a == b || a == c) sb.Append(a);
else sb.Append(b);
}
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s; cin >> s;
int n = (int)s.size() / 3;
string res;
res.reserve(n);
for (int i = 0; i < n; i++) {
char a = s[i], b = s[i + n], c = s[i + 2 * n];
if (a == b || a == c) res += a;
else res += b;
}
cout << res << "\n";
return 0;
}