BOJ 1599, 민식어

정렬

BOJ 1599, 민식어

이 문제는 정렬문제입니다.

풀이

입력받은 하나의 문자열을 pair를 사용하여 2개씩 저장해줍니다. 그리고 second의 문자열을 민식어에 맞게 정렬될 수 있도록 알파벳을 바꿔주고

sort를 사용해주면 first에 있는 문자열 기준으로 정렬됩니다. 그러면 second에 있는 문자열을 출력해주면 됩니다.

ng부분을 처리해주는 것이 관건이라고 생각이 드는데 i번째가 n이고 i+1번째가 g이면 i번째에 있는 n에 ng에 맞는 문자를 넣어주고 i+1번째부터 그 다음 문자들로 덮어버리고 마지막 문자에 NULL값을 넣어 문자열의 크기를 한 개 줄여 처리했습니다.

#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
int n;
pair<string, string> str[1001];
int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> str[i].first;
		str[i].second = str[i].first;
	}
	for(int k=0;k<n;k++)
		for (int i = 0; i < str[i].first.size(); i++)
		{
			if (str[k].first[i] == 'k')
				str[k].first[i] = 'c';
			else if ('e' < str[k].first[i] && str[k].first[i] <= 'n')
			{
				if (str[k].first[i] == 'n'&&str[k].first[i + 1] == 'g')
				{
					for (int j = i + 1; j < str[k].first.size()-1; j++)
						str[k].first[j] = str[k].first[j + 1];
					str[k].first[str[k].first.size() - 1] = NULL;
				}
				else str[k].first[i]--;
			}
			else
				str[k].first[i] = str[k].first[i];
		}
	sort(str, str + n);
	for (int i = 0; i < n; i++)
		cout << str[i].second << '\n';
	return 0;
}

출처 : https://www.acmicpc.net/problem/1599