작성일 :

문제 링크

20733번 - Triple Texting

설명

어떤 단어를 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;
}