새소식

코딩테스트/백준_브론즈

[C++][백준 4141] Numbersrebmun

  • -

[문제]

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;
}

'코딩테스트 > 백준_브론즈' 카테고리의 다른 글

[C++][백준 27160] 할리갈리  (0) 2023.04.04
[C++][백준 2083] 럭비 클럽  (0) 2023.03.31
[C++][백준 1264] 모음의 개수  (0) 2023.03.27
[C++][백준 1284] 집 주소  (3) 2023.03.26
[C++][백준 9086] 문자열  (0) 2023.03.24
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.