문제

구름 나라는 기존의 숫자 대신에 알파벳 소문자를 사용하여 숫자를 표기하기로 한다. 이를 구름 숫자라고 부른다. 구름 숫자는 아래의 표를 참고하여 작성할 수 있다.

구름 숫자는 효율성을 위해서 특별한 규칙을 가지고 있다. 여러 개의 구름 숫자를 이어서 작성하다가, 중복되는 알파벳이 있으면 합친다.

구름 숫자로 작성한 문자열이 주어질 때, 이를 기존의 숫자로 바꿔서 출력하는 프로그램을 작성하고자 한다. 이때 여러가지 경우의 수가 나온다면, 그 중 길이가 최대인 수를 출력하시오.


입력

첫째 줄에서는 문자열의 길이가 N(1 <= N <= 1,000)이 주어진다.

둘째 줄에서는 구름 숫자로 표기한 숫자가 길이 N만큼 입력된다.

문자열은 구름 숫자에 포함된 알파벳 소문자를 제외하고 주어지지 않는다.


map 자료구조를 활용하여 쉽게 해결할 수 있었고 정렬이 필요 없다고 판단하여 unorderd_map을 사용하였다.

 

#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;

unordered_map<string, string> matching;
string groomNumber[] = {"ze", "qw", "as", "zx", "we", "sd", "xc", "er", "df", "cv"};
int main() {
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	int n;
	string input, ans = "";
	for (int i = 0; i < 10; i++) matching[groomNumber[i]] = to_string(i);
	cin >> n >> input;
	for (int i = 0; i < n - 1; i++) {
		string word = input.substr(i, 2);
		if (matching.find(word) != matching.end()) ans += matching[word];
	}
	cout << ans;
	return 0;
}