전에 틀렸던 문제 오답했다.
map을 만드는 것과 if(n.find(temp)!=n.end() ) 같은 부분은 익숙해졌는데
for (char c:s)로 문자열에서 문자 하나하나씩 반복하는 것과 isdigit()함수로 숫자와 문자를 구분하는 접근이 놀라웠다.
함수를 잘 쓰면 정말 깔끔한 코드가 나오는구나.
많이 배웠다.
제대로 풀 때까지 계속 오답해야지.
Level 1 풀면서 Level 0과 c++ 기본서로 부족한 부분도 계속 채워야겠다.
<좋은 답>
#include <string>
#include <vector>
#include <map>
using namespace std;
map<string,int> n;
int solution(string s){
string answer="";
m["zero"] = 0;
m["one"] = 1;
m["two"] = 2;
m["three"] = 3;
m["four"] = 4;
m["five"] = 5;
m["six"] = 6;
m["seven"] = 7;
m["eight"] = 8;
m["nine"] = 9;
string temp = "";
for (char c:s){
if(isdigit(c)) answer+=c; //숫자면 answer에 넣고
else temp+=c; //숫자가 아니면 temp에 넣는다
if (n.find(temp)!=n.end()){
answer+=to_string(n[temp]);
temp="";
}
}
return stoi(answer);
}
<내 오답>
#include <string>
#include <vector>
#include <map>
#include<algorithm>
using namespace std;
int solution(string s) {
int answer = 0;
map<int ,string>temp;
temp[0]="zero";
temp[1]="one";
temp[2]="two";
temp[3]="three";
temp[4]="four";
temp[5]="five";
temp[6]="six";
temp[7]="seven";
temp[8]="eight";
temp[9]="nine";
for (int i=0; i<temp.size(); i++){
string word=temp[i]; //"zero" 같은 것 word에 담기
if ( s.find(word)!=string::npos){ //if ( s.find(word)!=s.end()){
string n=to_string(i);
s.replace(s.find(word),word.length(),n);
}
else{
continue;
}
}
answer=stoi(s);
return answer;
}
'CS > 알고리즘' 카테고리의 다른 글
[프로그래머스] c++ JadenCase 문자열 만들기 [Lv.2] (0) | 2023.08.23 |
---|---|
[c++][프로그래머스] 예산_Lv.1 (0) | 2023.08.21 |
[c++][프로그래머스] K번째 수 [성공] (0) | 2023.08.15 |
[c++][프로그래머스] 바탕화면 정리 [실패] (0) | 2023.08.06 |
[C++][프로그래머스] 실패율 [실패] (0) | 2023.08.06 |