BOJ 1599, 민식어
ProblemSolving ·이 문제는 정렬문제입니다.
풀이
입력받은 하나의 문자열을 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;
}