Game Develop

[Algorithm] Programmers :: 숫자 문자열과 영단어 본문

Algorithm/Programmers

[Algorithm] Programmers :: 숫자 문자열과 영단어

MaxLevel 2022. 5. 18. 05:23

https://programmers.co.kr/learn/courses/30/lessons/81301

 

코딩테스트 연습 - 숫자 문자열과 영단어

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자

programmers.co.kr

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int solution(string s) 
{
    // s는 1이상 50이하
    // s는 0으로 시작하는 경우 없음.
    // return은 1이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 주어진다.
    // isdigit // 알파벳이면 0리턴. 아니면 아무숫자리턴
    // substr(0,4) => 0~3 인덱스의 문자열 반환.
    vector<string> patterns = { "zero","one","two","three","four","five","six","seven","eight","nine" };
    string num = "0123456789";
    for (int i = 0; i < num.size(); i++)
    {
        s = regex_replace(s, regex(patterns[i]), num.substr(i, 1)); // s에서 patterns[i]에 해당하는 문자열 '전부를', num.substr(i,1)로 바꾼다. 
                                                                    // 즉 i가 0이면, s라는 문자열에서 zero라는 문자열 전부를 0으로 바꾼다.
        int a = 0;
    }
        
    return stoi(s);
}
cs

 

문제자체는 그냥 처음부터 하드코딩으로 하더라도 일단 풀겠다..라는 마인드로하면 풀 수 있다.

그래서 반 하드코딩식으로 구현하다가 아니다 싶어서 관련되서 좀 구글링했는데... 정규식이란걸 발견했다.

정규식을 알고 모르고에 따른 문자열문제에 대한 해결난이도는 정말 달라진다.

문자열문제를 쉽게 다루고싶으면, 반드시 정규식을 공부하길 바란다.

그냥 위 문제에 대해서, 정규식을 아는사람의 풀이와 모르는 사람의 풀이난이도가 많이 다르다.

다만, 다양한 상황에 능숙하게 쓰려면 연습이 많이 필요해보인다.

만약 100% 하드코딩으로 if문으로 도배해서 푼 사람이 위의 코드를 본다면 정신적충격을 받을수도 있다.

 

잘 정리된 사이트

https://ansohxxn.github.io/cpp/chapter18-5/

 

C++ Chapter 18.5 : 정규 표현식 소개

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀 🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!

ansohxxn.github.io

 

 

그리고 여담으로, 위의 문제는 프로그래머스 1레벨짜리 카카오채용문젠데, 정규식을 알고나서 보니까 그냥 대놓고 정규식에 대해서 알고있는가에 대한 문제같다. 다른 카카오문제같은경우도 특정 문자열을 단계를 거쳐 다른 문자열로 변환하는 거였는데 그냥 정규식문제였다. 만약 정규식을 모르고 풀었더라면 풀더라도 시간이 오래걸렸을것이다.

근데 난 아직 코테를 많이 안해봐서 이런 정규식문제가 원래 자주 나오는지는 잘 모르겠다.