작성일 :

문제 링크

23027번 - 1번부터 문제의 상태가…?

설명

문자열에 A, B, C가 포함되어 있는지에 따라 규칙적으로 문자들을 바꿔 출력하는 문제입니다.


접근법

먼저 문자열에 A, B, C가 있는지 확인합니다. A가 있으면 B, C, D, F를 A로 바꾸고, A가 없고 B가 있으면 C, D, F를 B로 바꿉니다. A와 B가 없고 C가 있으면 D, F를 C로 바꿉니다. A, B, C가 모두 없으면 모든 문자를 A로 바꿉니다.


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
29
30
31
32
33
using System;

class Program {
  static void Main() {
    var s = Console.ReadLine()!;
    var hasA = s.Contains("A");
    var hasB = s.Contains("B");
    var hasC = s.Contains("C");

    var arr = s.ToCharArray();
    if (hasA) {
      for (var i = 0; i < arr.Length; i++) {
        if (arr[i] == 'B' || arr[i] == 'C' || arr[i] == 'D' || arr[i] == 'F')
          arr[i] = 'A';
      }
    } else if (hasB) {
      for (var i = 0; i < arr.Length; i++) {
        if (arr[i] == 'C' || arr[i] == 'D' || arr[i] == 'F')
          arr[i] = 'B';
      }
    } else if (hasC) {
      for (var i = 0; i < arr.Length; i++) {
        if (arr[i] == 'D' || arr[i] == 'F')
          arr[i] = 'C';
      }
    } else {
      for (var i = 0; i < arr.Length; i++)
        arr[i] = 'A';
    }

    Console.WriteLine(new string(arr));
  }
}

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
32
33
34
35
36
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  string s; cin >> s;
  bool hasA = s.find('A') != string::npos;
  bool hasB = s.find('B') != string::npos;
  bool hasC = s.find('C') != string::npos;

  if (hasA) {
    for (char& ch : s) {
      if (ch == 'B' || ch == 'C' || ch == 'D' || ch == 'F')
        ch = 'A';
    }
  } else if (hasB) {
    for (char& ch : s) {
      if (ch == 'C' || ch == 'D' || ch == 'F')
        ch = 'B';
    }
  } else if (hasC) {
    for (char& ch : s) {
      if (ch == 'D' || ch == 'F')
        ch = 'C';
    }
  } else {
    for (char& ch : s)
      ch = 'A';
  }

  cout << s << "\n";

  return 0;
}