티스토리 뷰

문제

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

 

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

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

programmers.co.kr

 

풀이

1. 각 숫자에 해당하는 알파벳들을 map으로 저장해두고, s를 순회하며 찾은 숫자들을 관리합니다.

 

2. s를 다 돌고난 후, 찾은 숫자들에 자릿수들을 곱하여 원래 숫자를 찾을 수 있습니다.

 

코드

#include <bits/stdc++.h>
using namespace std;
map<string,int> m;
void init(){
m["zero"] = 1;
m["one"] = 2; m["two"] = 3; m["three"] = 4;
m["four"] = 5; m["five"] = 6; m["six"] = 7;
m["seven"] = 8; m["eight"] = 9; m["nine"] = 10;
}
int solution(string s) {
int answer = 0;
vector<int> v;
init();
int n = s.size();
for (int i = 0 ; i < n; i++){
if (isdigit(s[i])) v.push_back(s[i]-'0');
else{
for (int j = 1;; j++){
if (!m[s.substr(i, j)]) continue;
v.push_back(m[s.substr(i, j)] - 1);
i += j - 1;
break;
}
}
}
for (int i = v.size() - 1, mul = 1; i >= 0; i--, mul *= 10)
answer += v[i] * mul;
return answer;
}
댓글