[알고리즘 풀이 분석] 프로그래머스 숫자 문자열과 영단어 (2021 Kakao 인턴십)

nnnyeong·2021년 8월 25일
0

알고리즘 풀이분석

목록 보기
40/101

나도 고럭키를 따라서 카카오 기출문제들을 짚어보려 한다! 어차피 올솔과 같은 허망된 꿈은 꾸지 않기 때문에 비교적 쉽게 풀 수 있는 문제들을 정확하고 빠르게 푼 다음 아낀 시간을 중간 난이도의 두문제 정도에 투자해야할 것 같다!

이번 문제는 아주아주 간단한 문제이다. 2021 카카오 채용연계형 인턴십에서 출제되었고 아마도 1번이었겠지? 숫자 문자열과 영단어 문제이다!




숫자 문자열과 영단어

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

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

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
one4seveneight1478
23four5six7234567
2three45sixseven234567
123123



나의 풀이

풀이랄 것도 사실 별로 없는 문제이다. 진짜 간단한 문제인데 왜 예전엔 헤맸던 것 같지..? ;; 푼 기억은 있는데 원활히 풀었던 느낌은 아니다,, 큼,,

문자열 s의 원소 s[i] 가 0-9 사이의 문자이면 문자열에 바로 추가하고, a-z 사이의 문자라면 한 단어를 찾을 때 까지 i를 늘려나가면서 숫자를 찾을 key 문자열에 추가한다.

<map> 을 이용해 key, value가 모두 string 인 맵 dictionary 를 사용하였고 찾은 key에 해당하는 value 가 있을 때까지 key 문자열을 완성해 문자열에 알맞은 숫자 문자열로 변환해서 변환된 문자열에 값을 추가한다.

최종적으로 문자열을 int 로 변환해 반환하면 된다!




코드

#include <iostream>
#include <string>
#include <map>

using namespace std;

string strNum[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

int solution(string s) {
    map<string, string> dictionary;
    for (int i = 0; i <= 9 ; ++i) {
        dictionary[strNum[i]] = to_string(i);
    }

    string changed = "";

    for (int i = 0; i < s.size(); ++i) {
        if (s[i] >= '0' && s[i] <= '9'){
            changed += s[i];
        }else{
            string key = "";
            key += s[i];

            int j = i+1;
            while ( j<s.size() && dictionary.count(key) == 0){
                key += s[j++];
            }
            changed += dictionary[key];
            i = j-1;
        }
    }

    return stoi(changed);
}
profile
주니어 개발자까지 ☄️☄️

0개의 댓글