코딩 공부 연습
프로그래머스 : 숫자 문자열과 영단어
miffy짱
2022. 8. 3. 22:28
반응형
이번에도 굉장히 멍청하게 풀었다. 아직은 오랜만에 해서 그런거라 치고 이거도 좀 더 좋은 풀이로 바꿔보고, 문자열 다루는 아이니까 파이썬으로도 해볼 생각이다!
#include <vector>
#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;
int solution(string s) {
int answer = 0;
//먼저, 문자열 시작부터 보면서 알파벳으로 시작하면 그냥 스위치문 갈겨서 걍 다 찾자.
//찾았으면 그 단어 길이만큼 뒤로 밀자.
// char* 로 들어왔으면 strncmp로 비교하고, 그 길이만큼 i 를 이동시키면서 했을 것 같다.
int i = 0;
while(!s.empty())
{
if (s[i] >= 'a' && s[i] <= 'z')
{
if (s.find("zero") == 0)
{
answer = answer*10 + 0;
s.erase(0,4);
}
if ( s.find("one") == 0)
{
answer = answer*10 + 1;
s.erase(0,3);
}
else if (s.find("two") == 0)
{
answer = answer*10 + 2;
s.erase(0,3);
}
else if (s.find("three") == 0)
{
answer = answer*10 + 3;
s.erase(0,5);
}
else if (s.find("four") == 0)
{
answer = answer*10 + 4;
s.erase(0,4);
}
else if (s.find("five") == 0)
{
answer = answer*10 + 5;
s.erase(0,4);
}
else if (s.find("six") == 0)
{
answer = answer*10 + 6;
s.erase(0,3);
}
else if (s.find("seven") == 0)
{
answer = answer*10 + 7;
s.erase(0,5);
}
else if (s.find("eight") == 0)
{
answer = answer*10 + 8;
s.erase(0,5);
}
else if (s.find("nine") == 0)
{
answer = answer*10 + 9;
s.erase(0,4);
}
}
else
{
answer = answer*10 + s[i] - '0';
s.erase(0,1);
}
}
return answer;
}
딱 봐도 단순무식하다. 숫자가 아닌 a~z 사이 문자가 읽히면 거기서부터 그냥 one 부터 zero 까지 다 비교한다. 하나라도 걸리면 그 단어 길이만큼 문자열 앞을 그냥 잘라내 버리고 그 수를 answer에 더해준다. 숫자일 때는 그냥 숫자로 바꿔주면 된다!
어떻게 더 좋게 풀수 있을까?