티스토리 뷰
✨ 문제 풀이
나는 문자열에서 한 글자씩 비교해가면서, 만약 숫자라면 그대로 숫자를 반환하고 zero~nine 의 문자열 중에 하나와 일치하면 그 숫자 (=인덱스)를 반환해주는 식으로 문제를 해결했다.
그래서 중요하게 생각한 부분이 문자열의 몇 번째 인덱스부터 확인할 건지 매개변수로 보내주는 것과, 숫자 또는 영단어에 해당하는 숫자뿐만 아니라 offset을 함께 반환해주는 것이었다. 그래서 두 개의 int를 반환해주어야 하기 때문에 vector를 이용해서 0번째에 저장된 데이터는 일치하는 숫자, 1번째에 저장된 데이터는 offset으로 반환했다.
🗓 코드
#include <string>
#include <vector>
using namespace std;
bool isIntegerNumber(char c)
{
if (c - '0' >= 0 && c - '0' < 10)
return true;
return false;
}
vector<int> getNumberAndOffset(int start, string word)
{
string numberWords[10] = {
"zero",
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine"};
string temp = "";
int offset = 1;
vector<int> result;
if (isIntegerNumber(word[start]))
{
result.push_back((word[start] - '0'));
result.push_back(offset);
return result;
}
for (int s = start; s < word.size(); s++)
{
temp += word[s];
for (int index = 0; index < 10; index++)
{
if (numberWords[index] == temp)
{
result.push_back(index);
result.push_back(offset);
}
}
offset += 1;
}
return result;
}
int solution(string s)
{
int answer = 0;
string answerInSentence;
vector<int> numberAndOffset;
int i;
for (i = 0; i < s.size();)
{
numberAndOffset = getNumberAndOffset(i, s);
answerInSentence += to_string(numberAndOffset[0]);
i += numberAndOffset[1];
}
answer = stoi(answerInSentence);
return answer;
}
그런데 정말 매번 문자열 문제를 풀 때마다 regex를 제대로 사용하지 못해서 시간을 많이 소요했다는 느낌을 받는다.
regex를 잘 이용해서 문자열 문제를 해결하도록 해야할 것 같다.
#include <string>
#include <regex>
using namespace std;
int solution(string s)
{
int answer;
s = regex_replace(s, regex("zero"), "0");
s = regex_replace(s, regex("one"), "1");
s = regex_replace(s, regex("two"), "2");
s = regex_replace(s, regex("three"), "3");
s = regex_replace(s, regex("four"), "4");
s = regex_replace(s, regex("five"), "5");
s = regex_replace(s, regex("six"), "6");
s = regex_replace(s, regex("seven"), "7");
s = regex_replace(s, regex("eight"), "8");
s = regex_replace(s, regex("nine"), "9");
answer = stoi(s);
return answer;
}
'Algorithm' 카테고리의 다른 글
[백준/c++] 14938 서강그라운드 (0) | 2022.05.18 |
---|---|
[2021 카카오 인턴십 코딩테스트/c++] 거리두기 확인하기 (0) | 2022.05.07 |
[백준/c++] 13022 늑대와 올바른 단어 (0) | 2022.05.03 |
[백준/c++] 17609 회문 (0) | 2022.05.02 |
[백준/c++] 2805 나무 자르기 (0) | 2022.04.28 |
댓글