[프로그래머스] 숫자 문자열과 영단어
Programmers - [2021 카카오 채용연계형 인턴십] 숫자 문자열과 영단어
사용 언어 - C++
소요 시간 - 약 35분
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/81301
문제 요약
- 0~9로 이루어진 숫자를 랜덤하게 문자열로 바꾸어 제공 ex) 1478 → one4seveneight
- 문자열을 각 해당하는 수로 치환하여 return
최종 코드
#include <string>
#include <vector>
#include <regex>
using namespace std;
int solution(string s) {
int answer = 0;
vector<string> number = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
//one4seveneight -> 1478로 바꾸기
//바꾸는 방법? regex_replace와 regex를 사용하여 정규식 비교
for(int i = 0; i < number.size(); i++)
{
s = regex_replace(s, regex(number[i]), to_string(i));
}
//숫자를 리턴
answer = stoi(s);
return answer;
}
트러블 슈팅
- regex는 사용할 수 없는 함수라는 에러가 발생 → regex 헤더 포함
- regex_replace가 정상적인 인수를 할당받지 못했다는 에러 발생 → regex_replace의 마지막 인수를 int형으로 넘겼기 때문에 발생한 문제 → i를 to_string 함수를 통해 문자열로 전달
- 코드 실행 단계에서는 정상적으로 작동했지만 채점 과정에서 abort / segmentation fault가 발생하는 문제점이 생김
- regex_replace를 s의 size만큼 하려고 했기 때문에 정상적인 결과 값을 얻지 못하고 에러가 발생 → s.size()를 number.size()로 변경
해결 과정
- 처음에는 문자열을 어떻게 쪼개야 할까를 고민
- 다른 코테 문제를 풀다가 사용해봤던 regex와 regex_replace를 떠올림
- 이 두 가지를 사용하면 굳이 문자열을 쪼개지 않아도 바로 문자열을 치환할 수 있겠다는 생각을 하고 문제 해결
문제 풀이 후 소감
- 어떤 새로운 함수를 쓸 때는 꼭 내가 그 헤더를 포함 시켰는지를 확인하자
- 해당 함수를 사용할 때는 그 함수가 어떤 파라미터를 요구하는지 잘 확인하자
- 문제를 푸는 단계에서 배열의 크기를 잘 고려하자. 아니면 abort나 segmentation fault 오류가 발생할 가능성이 높음