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

Sierra·2022년 2월 6일
0

[Programmers] LV1

목록 보기
5/6
post-thumbnail

문제 설명

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

다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

숫자영단어
0zero
1one
2two
3three
4four
5five
6six
7seven
8eight
9nine

제한사항

1 ≤ s의 길이 ≤ 50
s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

입출력 예

sresult
"one4seveneight"1478
"23four5six7"234567
"2three45sixseven"234567
"123"123

Solution

1. Python

def solution(s):
    en = ['zero','one','two','three','four','five','six','seven','eight','nine']
    answer = ''
    for idx, num in enumerate(en):
        if num in s:
            s = s.replace(num,str(idx))
        answer = s
    return int(answer)

파이썬은 다 좋은데 사람을 너무 게으르게 만드는 언어같다. 진심 겁나 간단하다.
저기 미리 저장해둔 키워드들이 곧 있으면 바꿔야하는 놈들이다. 인덱스 번호 순서대로 저장해두었다.

2. C++

#include <string>
using namespace std;

bool isNum(char c) {
    return '0'<=c && c<='9';
}

int solution(string s) {
    int answer = 0;
    
    string str = "";
    for(int i = 0; i < s.size(); i++) {
        if(isNum(s[i])) {
            str.push_back(s[i]);
            continue;
        }
        if(s.size()-i>=5 && s.substr(i,5)=="three") str.push_back('3');
        else if(s.size()-i>=5 && s.substr(i,5)=="seven") str.push_back('7');
        else if(s.size()-i>=5 && s.substr(i,5)=="eight") str.push_back('8');
        else if(s.size()-i>=4 && s.substr(i,4)=="zero") str.push_back('0');
        else if(s.size()-i>=4 && s.substr(i,4)=="four") str.push_back('4');
        else if(s.size()-i>=4 && s.substr(i,4)=="five") str.push_back('5');
        else if(s.size()-i>=4 && s.substr(i,4)=="nine") str.push_back('9');
        else if(s.size()-i>=3 && s.substr(i,3)=="one") str.push_back('1');
        else if(s.size()-i>=3 && s.substr(i,3)=="two") str.push_back('2');
        else if(s.size()-i>=3 && s.substr(i,3)=="six") str.push_back('6');            
    }
    
    answer = stoi(str);
    return answer;
}

주로 문제풀이에 C++를 쓰는 이유가 있다면 어떤 곳에서든 어지간해선 C++를 봐서도 있고 문제풀이를 언젠가부터 C++로 하다보니 딱히 바꿔야할 이유를 모르겠어서?
또한 도저히 모르겠을때나 코드 리뷰를 할 때 자료의 양으로 따지면 C++이 정말 많다고 체감하고있다. 물론 JAVA나 Python 정도 언어는 C++ 만큼이나 많은 사람들이 사용하는 언어라 자료가 많지만 C# 같은 건 진짜 찾기 힘든 경우도 있다.

빡구현 문제다. 문자열 처리엔 확실히 파이썬이 좋긴 하구나 싶었던 문제였다.

profile
블로그 이전합니다 : https://swj-techblog.vercel.app/

0개의 댓글