프로그래머스(Programmers)
숫자 문자열과 영단어
cosmohoo
2021. 12. 6. 20:52
반응형
제한사항
- 1 ≤ s의 길이 ≤ 50
- s가 "zero" 또는 "0"으로 시작하는 경우는 주어지지 않습니다.
- return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
입출력 예
sresult
"one4seveneight" | 1478 |
"23four5six7" | 234567 |
"2three45sixseven" | 234567 |
"123" | 123 |
입출력 예 설명
입출력 예 #1
- 문제 예시와 같습니다.
입출력 예 #2
- 문제 예시와 같습니다.
입출력 예 #3
- "three"는 3, "six"는 6, "seven"은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
- 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.
입출력 예 #4
- s에는 영단어로 바뀐 부분이 없습니다.
제한시간 안내
- 정확성 테스트 : 10초
=> 단순 구현 문제입니다.
=> 주어진 string s에서 숫자로 주어진 구역은 바로 number에 push_back 하였습니다.
=> 문자로 주어진 구역은 첫 번째 숫자와 두 번째 숫자로 비교하여 알맞은 숫자를 찾아 number에 push_back 하였습니다.
=> ONE , TWO, THREE ,,... 의 경우 첫 번째, 두 번째 글자까지 똑같은 경우가 없으므로 2번째 글자까지만 확인하면 됩니다.
=> 해당하는 숫자를 찾았을 경우 더 찾는 것은 시간낭비이기 때문에 for문의 break를 걸었습니다.
=> 문제에서는 Int형 answer 를 원했으므로, stoi 함수를 사용하여 원하는 값을 반환하였습니다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<string> arr={"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
int solution(string s) {
int answer = 0;
string number;
int sSize = s.size();
for(int i=0; i<sSize; i++)
{
if(s[i] >= '0' && s[i] <= '9' )
{
number.push_back(s[i]);
}
else
{
for(int j=0; j<10; j++)
{
if((arr[j][0] == s[i]) && (arr[j][1] == s[i+1]) ) //일치하는 단어 찾음
{
char tmp = j+ '0';
number.push_back(tmp);
i += arr[j].size() -1;
break;
}
}
}
}
answer=stoi(number);
return answer;
}
반응형