[문제]
4141번: Numbersrebmun (acmicpc.net)
4141번: Numbersrebmun
Anna and Bob are starting up a new high-tech company. Of course, one of their key considerations is choosing a good name for the company. Palindromes are cool. (A palindrome is a word that is the same when reversed, like the names of our two entrepreneurs.
www.acmicpc.net
[문제 풀이]
팰린드롬이 되는지 안되는지를 확인하는 문제이다.
팰린드롬인지 아닌지 확인하는 방식은 여러가지가 있지만 그 중에서 나는 아래와 같이 사이즈가 string.size() / 2 까지 앞과 뒤가 일치한다면 팰린드롬이라는 방식을 사용했다.
bool isPalindrome(string s){
bool answer = true;
for(int i = 0;i<s.size() / 2; i++){
if(telephone[s[i]] != telephone[s[s.size() - 1 - i]]){
answer = false;
}
}
return answer;
}
다만, 여기서 문제가 추가되는데 문제에서 제공되는 문자를 ABC = 2로 DEF = 3으로 .... WXYZ = 9로 치환해서 파악해야 한다는 점이다.
여기서 나는 map<char, int>를 활용해서 문제를 해결했다. map['A'] = 2... 로 두어서 바로 해당 문자에 할당된 숫자를 파악하였다.
[회고]
map을 쓴건 좋았지만 실제로 코드를 만들어 보니 노가다성이 짙었다. uppercase뿐만 아니라 lowercase까지 요구하는 문제라서 더더욱 노가다성이 짙었다. 아마 문제를 만드신분은 유니코드를 활용해서 풀라고 문제를 만드신 것 같다.
[코드]
#include <iostream>
#include <map>
#define endl "\n"
using namespace std;
map<char,int> telephone;
bool isPalindrome(string s){
bool answer = true;
for(int i = 0;i<s.size() / 2; i++){
if(telephone[s[i]] != telephone[s[s.size() - 1 - i]]){
answer = false;
}
}
return answer;
}
int main(){
telephone['A'] = 2;
telephone['a'] = 2;
telephone['B'] = 2;
telephone['b'] = 2;
telephone['C'] = 2;
telephone['c'] = 2;
telephone['D'] = 3;
telephone['d'] = 3;
telephone['E'] = 3;
telephone['e'] = 3;
telephone['F'] = 3;
telephone['f'] = 3;
telephone['G'] = 4;
telephone['g'] = 4;
telephone['H'] = 4;
telephone['h'] = 4;
telephone['I'] = 4;
telephone['i'] = 4;
telephone['J'] = 5;
telephone['j'] = 5;
telephone['K'] = 5;
telephone['k'] = 5;
telephone['L'] = 5;
telephone['l'] = 5;
telephone['M'] = 6;
telephone['m'] = 6;
telephone['N'] = 6;
telephone['n'] = 6;
telephone['O'] = 6;
telephone['o'] = 6;
telephone['P'] = 7;
telephone['p'] = 7;
telephone['Q'] = 7;
telephone['q'] = 7;
telephone['R'] = 7;
telephone['r'] = 7;
telephone['S'] = 7;
telephone['s'] = 7;
telephone['T'] = 8;
telephone['t'] = 8;
telephone['U'] = 8;
telephone['u'] = 8;
telephone['V'] = 8;
telephone['v'] = 8;
telephone['W'] = 9;
telephone['w'] = 9;
telephone['X'] = 9;
telephone['x'] = 9;
telephone['Y'] = 9;
telephone['y'] = 9;
telephone['Z'] = 9;
telephone['z'] = 9;
int n;
cin>>n;
while(n--){
string s;
cin>>s;
bool answer;
answer = isPalindrome(s);
cout<<(answer ? "YES" : "NO")<<endl;
}
return 0;
}