링크: https://school.programmers.co.kr/learn/courses/30/lessons/81301?language=cpp
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
1. 문제 접근
이 문제는 숫자가 영어 단어와 숫자 형태로 섞여 있는 문자열을 실제 숫자로 변환하는 문제이다. 예를 들어 다음과 같은 문자열이 들어온다.
- "one4seveneight"
- "23four5six7"
- "2three45sixseven"
핵심은 영어 단어를 => 숫자로 바꾸는 것이다. 영단어는 다음과 같이 구성된다.
영단어 숫자
| 영단어 | 숫자 |
| zero | 0 |
| one | 1 |
| two | 2 |
| three | 3 |
| four | 4 |
| five | 5 |
| six | 6 |
| seven | 7 |
| eight | 8 |
| nine | 9 |
이 문제는 크게 두 가지 방식으로 해결할 수 있다.
- 문자열을 한 글자씩 직접 확인하면서 변환 - 1번 풀이
- regex_replace()를 사용하여 문자열 치환 - 2번풀이
(참고)정규표현식 regex란?
2. 풀이 (2개)
- 1번 풀이 (직접 문자열 비교)
#include <string> #include <vector> using namespace std; int solution(string s) { string answer = ""; string temp =""; vector <string> v = { "zero", "one" ,"two" ,"three" ,"four", "five","six", "seven","eight","nine" }; for(int i=0 ; i<s.size() ; i++){ // 숫자인 경우 => 바로 answer에 저장 if(s[i]>='0' && s[i]<= '9'){ answer += s[i]; } // 영단어인 경우 => temp에 누적 else { temp += s[i]; for(int j=0; j<v.size() ; j++){ if(temp == v[j]){ // 완성된 영단어 나오면 숫자로 변환 answer += to_string(j); temp =""; } } } } return stoll(answer); }- 풀이 설명
이 방법은 문자열을 한 글자씩 읽으면서 직접 판단하는 방식이다. 예를 들어 "one4seveneight"가 들어오면 다음처럼 동작한다.
temp = "o" temp = "on" temp = "one" //이때 "one"은 v[1]과 같으므로 answer += "1"; 을 수행한다 - 숫자는 바로 저장- 완성된 영단어가 나오면 숫자로 변환 - 문자는 temp에 누적
- 풀이 설명
- 2번 풀이(regex 사용)
#include <string> #include <vector> #include <algorithm> #include <regex> using namespace std; vector<string> numbers = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; int solution(string s) { regex r; // 정규 표현식 변수선언(패턴 저장하는 변수) for(int i = 0; i < numbers.size(); i++) { r = numbers[i]; //패턴 정보 s = regex_replace(s, r, to_string(i)); // } return stoi(s); }- 풀이 설명
이 방법은 문자열 치환 함수(regex_replace)를 사용하는 방식이다.
(참고)숫자를 문자열로 변환(123 => "123") to_string() 함수//예를 들어 s = "one4seveneight" s = regex_replace(s, regex("one"), "1"); s = "14seveneight" - 이 작업을 "zero"부터 "nine"까지 반복하면 최종적으로 숫자 문자열만 남게 된다.
- 풀이 설명
3. 문법 설명
- regex_replace()
특정 문자열을 다른 문자열로 바꾸는 함수이다
regex_replace(문자열, 정규표현식, 바꿀문자열) regex_replace(s, regex("one"), "1") "one" → "1"
4. 최종 요약
| 풀이 | 특징 |
| 직접 구현 풀이 | 문자열 처리 원리를 이해하기 좋음 |
| regex 풀이 | 코드가 짧고 간단함 |
핵심 아이디어는 다음과 같다.
- 숫자는 그대로 저장
- 영단어는 숫자로 변환
- 마지막에 문자열을 숫자로 변환
문자열 처리 문제에서는
- stoi(): string -> int
- to_string(): int -> string
- regex_replace() -> 치환
'코테 정리 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스/C++] 문자열 내마음대로 정렬하기 (Lv.1) (0) | 2026.05.23 |
|---|---|
| [프로그래머스/C++] 명예의 전당 (Lv.1) (0) | 2026.05.22 |
| [프로그래머스/C++] 두 개 뽑아서 더하기 (Lv.1) (0) | 2026.05.20 |
| [프로그래머스/C++] 시저 암호 (Lv.1) (0) | 2026.05.18 |
| [프로그래머스/C++] 가장 가까운 같은 글자 (Lv.1) (0) | 2026.05.14 |
