[C++/프로그래머스] 숫자 문자열과 영단어

다곰·2022년 11월 23일
0

우당탕탕 코테준비

목록 보기
22/98

✅ LV.1

📌 2021 KAKAO 채용연계형 인턴십

✏️ 솔루션

  • vector<pair<string,int>> alpha; <영단어 앞 2자리, 영단어 길이>로 저장해서 사전처럼 사용
  • int cur : 현재 탐색중인 글자 위치
  • string ans : 정답 문자열 ➡️ 최종적으로 stoiint 형으로 바꿔서 answer 에 저장

자리 옮겨가면서 문자를 읽어와서 판별

  • 0~9일 경우: 아스키 코드 60 이하
    1) 현재 글자만 숫자로 변환
    2) 다음 자리는 하나 뒤
  • 문자일 경우 경우:
    1) 현재 글자와 다음 글자 읽어서 지금 숫자가 무엇인지 alpha pair 에서 탐색
    2) 해당 글자 인덱스 ans 포함시키고 자릿수 더하기

📌 아쉬운 부분

문자열의 경우, 현재 문자열에 맞는 알파벳을 찾기 위해 매번 for 문으로 돌려서 찾는 방법이 비효율적
그렇다고 unordere_map 을 쓰기에는 그때마다 find 함수 불러서 iterator 값 빼주고 하는 과정도 딱히 효율적이지는 않은 것 같음

✏️ 개선 솔루션

문자열 치환 함수 regex_replace 사용해서 문자를 숫자로 치환해주기
문자열 split 하고 그럴 필요없이 0~9까지 차례차례 바꿔주고 s 를 갱신해주면 최종적으로 모든 문자를 숫자로 변환할 수 있음

🔗 [C++] 문자열 치환 함수: replace, regex_replace

✏️ 개선 코드

#include <bits/stdc++.h>
using namespace std;

int solution(string s) {
    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");    
    return stoi(s);
}
profile
다교미의 불꽃 에러 정복기

0개의 댓글