-
숫자 문자열과 영단어프로그래머스(Programmers) 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; }
반응형