작성일 :

문제 링크

5358번 - Football Team

설명

문자열에 대한 간단한 구현 문제입니다.

문제에서 설명하는 내용은 다음과 같습니다.

  1. 축구 코치의 키보드가 고장나서, 선수들의 이름 중 ‘i’ 와 ‘e’ 문자가 서로 뒤바뀌었다. (소/대문자 포함)
  2. 뒤바뀌기 전의 올바른 선수의 이름을 출력해야 한다.

위 조건들을 참고하여, 입력으로 주어진 잘못된 선수들의 이름을 올바른 선수들의 이름으로 바꾸어 출력합니다.

문제를 해결하기 위해 적당한 자료구조로,
C# 에서는 Dictionary, List , C++ 에서는 mapvector 자료구조를 선택하였습니다.


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
namespace Solution {
  class Program {

    static string TranslateCorrectName(string name) {
      var missSpellDict = new Dictionary<char, char> { {'e', 'i'}, {'i', 'e'}, {'E', 'I'}, {'I', 'E'} };
      var correctsNameList = new List<char>();

      foreach (char word in name) {
        if (missSpellDict.ContainsKey(word))
          correctsNameList.Add(missSpellDict[word]);
        else correctsNameList.Add(word);
      }

      return new string(correctsNameList.ToArray());
    }

    static void Main(string[] args) {

      while (true) {
        string? fullName = Console.ReadLine();
        if (fullName == null) break ;

        Console.WriteLine(TranslateCorrectName(fullName));
      }

    }
  }
}



[ 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
#include <bits/stdc++.h>

using namespace std;

string TranslateCorrectName(const string& name) {
  map<char, char> missSpellDict = { {'e', 'i'}, {'i', 'e'},
                                   {'E', 'I'}, {'I', 'E'} };
  vector<char> correctsNameList;

  for (char word : name) {
    if (missSpellDict.find(word) != missSpellDict.end())
      correctsNameList.push_back(missSpellDict[word]);
    else
      correctsNameList.push_back(word);
  }

  return string(correctsNameList.begin(), correctsNameList.end());
}

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

  while (true) {
    string fullName;
    if (!getline(cin, fullName)) break ;

    cout <<TranslateCorrectName(fullName) << "\n";
  }

  return 0;
}