728x90
반응형
문제 설명
해당 문제는 숫자로 이루어진 문자열에 숫자를 의미하는 영단어가 섞여 있는 경우, 이를 원래 숫자 형태로 변환하는 문제이다.
문자열에는 zero부터 nine까지의 영단어가 포함될 수 있으며, 이 단어들을 실제 숫자로 바꿔 하나의 정수로 반환해야 한다.
예를 들어 "one4seveneight"은 "1" + "4" + "7" + "8"로 해석되어 1478이 된다.
핵심 방법
자 0부터 9까지에 해당하는 영단어를 미리 매핑해놓는다.
입력 문자열에서 해당 영단어가 존재할 경우 find 함수로 위치를 찾고, 해당 부분을 대응하는 숫자로 replace 한다.
모든 영단어를 숫자로 치환한 후, stoi() 함수를 이용해 문자열을 정수로 변환해 반환한다.
map에 대한 자세한 설명은 아래 링크에 정리해두었다.
std::map, std::unordered_map
std::mapmap은 정렬된 컨테이너로 key 값을 기준으로 자동 정렬된다.(정렬은 오름차순)또한 중복키를 허용하지 않기 때문에 동일한 key 값은 존재할 수 없다.이진 탐색 트리를 기반으로 구현이 되었
jinho082008.tistory.com
#include <string>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
int solution(string s) {
unordered_map<int, string> m;
// 숫자 0부터 9까지에 해당하는 영단어를 매핑
m[0] = "zero"; m[1] = "one"; m[2] = "two"; m[3] = "three"; m[4] = "four";
m[5] = "five"; m[6] = "six"; m[7] = "seven"; m[8] = "eight"; m[9] = "nine";
// 영단어를 모두 숫자로 바꾼 뒤, 최종적으로 정수로 변환할 예정
for (int i = 0; i < 10; i++)
{
int it = 0;
// 문자열에서 해당 영단어가 존재하는 위치를 계속 찾아서
// 숫자로 변환 (문자열에 더 이상 없을 때까지 반복)
while ((it = s.find(m[i])) != string::npos)
{
s.replace(it, m[i].length(), to_string(i)); // 영단어를 숫자 문자열로 대체
}
}
return stoi(s); // 최종적으로 문자열을 숫자로 변환하여 반환
}
728x90
반응형
'프로그래밍 > 코딩테스트' 카테고리의 다른 글
코딩테스트 : 최고의 집합 (0) | 2025.04.18 |
---|---|
코딩테스트 : 두 개 뽑아서 더하기 (0) | 2025.04.17 |
코딩테스트 : 문자열 내 마음대로 정렬하기 (0) | 2025.04.17 |
코딩테스트 : [1차] 비밀지도 (0) | 2025.04.17 |
코딩테스트 : 추억 점수 (0) | 2025.04.17 |