728x90
- 문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/120894
입력된 문자열에서 숫자에 해당되는 문자열을 숫자로 바꿔주는 문제이다.
문자열을 하나씩 비교하여 숫자로 바꿔주도록 하였다.
1) 입력된 문자열의 길이가 0보다 클 동안 수행
2) 첫번째 문자 위치 기준으로 일치하는 숫자 문자열이 있는지 확인
3) 확인된 숫자 문자열을 입력된 문자열에서 제거
4) 확인된 숫자값 저장
#include <string>
#include <vector>
using namespace std;
long long solution(string numbers) {
vector<string> str_numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
long long answer = 0;
while (numbers.length() > 0)
{
for (int idx = 0; idx < str_numbers.size(); idx++)
{
string str_num = str_numbers.at(idx);
string str = numbers.substr(0, str_num.length());
if (str == str_num)
{
answer = answer * 10 + idx;
numbers.erase(0, str_num.length());
}
}
}
return answer;
}
하나씩 비교하여 푸는 것이 아닌, find와 replace 함수를 이용해 일치하는 문자열을 치환하여 문제를 풀어줄 수도 있다.
1) 숫자 문자열 목록을 첫번째 부터 마지막번째까지 for 문
2) 숫자 문자열과 일치하는 문자열이 있는 시작 index 확인
3) 시작 index 부터 숫자 문자열 사이즈만큼 숫자로 치환
4) 모두 치환 완료된 문자열을 숫자로 변환
#include <string>
#include <vector>
using namespace std;
long long solution(string numbers) {
vector<string> str_numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
long long answer = 0;
int idx;
for (int i = 0; i < str_numbers.size(); i++)
{
while ((idx = numbers.find(str_numbers[i])) != string::npos)
{
numbers.replace(idx, str_numbers[i].length(), to_string(i));
}
}
return stoll(numbers);
}
문자열에서 동일 위치를 찾아서 모두 바꿔주는 걸 한 번에 해주는 regex_replace 함수를 이용해 풀어주는 방법도 있다.
#include <string>
#include <vector>
#include <regex>
using namespace std;
long long solution(string numbers) {
vector<string> str_numbers = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
long long answer = 0;
for (int i = 0; i < str_numbers.size(); i++)
{
numbers = regex_replace(numbers, regex(str_numbers[i]), to_string(i));
}
return stoll(numbers);
}
728x90
'Algorithm > Programers' 카테고리의 다른 글
이진수 더하기 (0) | 2023.06.24 |
---|---|
등수 매기기 (0) | 2023.06.24 |
수 조작하기 1 (0) | 2023.06.24 |
공배수 (0) | 2023.06.24 |
한 번만 등장한 문자 (0) | 2023.06.20 |
댓글