백준/실버
[백준 28125번] 2023 아주머학교 프로그래딩 정시머힌 (C++)
게임개발기원
2023. 7. 17. 17:58
문제링크 : https://www.acmicpc.net/problem/28125
28125번: 2023 아주머학교 프로그래딩 정시머힌
2023 APC를 총괄하고 있는 A.N.S.I 부회장 현빈이는 문제들을 검수하던 중 이상한 점을 발견하였다. 그것은 몇몇 단어들이 비슷하게 생겼지만, 다른 철자로 되어있었던 것이었다. 어리둥절한 현빈이
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
map<char, char> m = { {'@', 'a'},
{'[', 'c'},
{'!', 'i'},
{';', 'j'},
{'^', 'n'},
{'0', 'o'},
{'7', 't'},};
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
while(N--)
{
string s, result = "";
int cnt = 0;
cin >> s;
for(int i=0; i<s.size(); i++)
{
if(!isalpha(s[i])) //알파벳이 아니라면
{
if(s[i]=='\\')
{
if(s[i+1]=='\\') // \\' 인 경우 3글자이므로 2번 건너뜀
{
result+='w'; i++; i++;
}
else // \' 인 경우 2글자이므로 1번 건너뜀
{
result+='v'; i++;
}
cnt++;
}
else
{
result+=m[s[i]]; //변환하여 더해줌
cnt++;
}
}
else result+=s[i]; //알파벳이면 더해줌
}
if(cnt*2>= result.size()) cout << "I don't understand" <<"\n";
else cout << result << "\n";
}
return 0;
}
문자열 문제이다.
'[' 기호를 ']'로 쓴 것을 너무 늦게봐서 시간을 많이 날렸다..
그리고 해석 포기조건을 웬진 모르겠는데 해석 불가능한 문자가 있을 때 해석 포기로 보고 또 시간을 엄청 날렸다.
과도하게 틀리는게 이상해서 문제를 다시 읽어보니 알파벳이 절반이상 바뀌었으면 해석 포기였다..
처음에 map으로 바꿀 문자에 대해서 미리 저장해주고 시작해주면 된다.
이때 문제가 되는 것은 \' 와 \\' 의 경우이다.
C++에서는 \이 문자로 인식되기 위해서는 \\을 입력해주어야 하고, '을 문자로 인식되기 위해서는 '\''을 입력해주어야 한다.
그리고 \'의 경우에는 2문자 이기에 다음 위치값을 스킵해주고, \\'의 경우 3문자이기에 다음에 그다음까지 위치값을 스킵해준다.
그리고 이렇게 문자 변환 과정이 발생할때마다 카운팅을 해서 해당 카운팅의 값이 문자열의 절반이상이면 해석 불가능이므로 "I don't understand"를 출력해준다.