문제
숫자의 일부가 문자열로 표현된 s가 주어진다. 원래숫자를 찾아서 반환하는 문제이다.
풀이
1.0부터 9까지 문자열 배열을 선언한다.
2. zero부터 nine 까지 s에 포함이 되어있는지 검사한후 있으면 문자열을 숫자문자열(ex ) "9")로 바꾸어준다.
3. 여러번 포함 되어 있을 수도 있으니까 없을 때까지 검사한다.
4. 문자열을 숫자로 바꾸어 반환한다.
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 0;
string num_str[]={"zero", "one", "two", "three","four","five","six","seven","eight","nine"};
for(int i=0;i<10;i++){
while(s.find(num_str[i])!=string::npos){
s.replace(s.find(num_str[i]),num_str[i].length(),to_string(i));
}
}
answer= stoi(s);
return answer;
}
다른 사람의 풀이
1.
s = regex_replace(s, regex("zero"), "0");
- regex_replace를 써서 한번에 바꾸어주었다.
2.
if(!num_str[j].compare(0, num_str[j].length(), s, i, num_str[j].length())) {
answer = answer * 10 + j;
}
문자열 전체를 비교하는 compare는 알아도 인자가 4개 들어가는 compare는 처음봐서 신기했다.
찾아보니까
str.compare(a,b,str2,c,d);
뜻은 str의 a번째 인덱스부터 b개까지 부분 분자열을 str2의 c번째 인덱스부터 d개까지 비교한다는 뜻이다.
두 문자열이 같으면 0을 반환한다.
https://cplusplus.com/reference/string/string/compare/
https://cplusplus.com/reference/string/string/compare/
substrings (2)int compare (size_t pos, size_t len, const string& str) const;int compare (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen = npos) const;
cplusplus.com
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 이모티콘 할인행사 c++ (1) | 2023.11.25 |
---|---|
[프로그래머스] 코딩 테스트 공부 C++ (0) | 2023.11.24 |
[프로그래머스] 하노이의 탑 c++ (0) | 2023.11.11 |
[프로그래머스] 포켓몬 c++ (0) | 2023.11.07 |
[프로그래머스] 정수삼각형 c++ (0) | 2023.11.06 |