문제 설명 |
본 문제는 프로그래머스의 숫자 문자열과 영단어 문제로
"1seven2eight" 과 같이 문자열에 숫자와 숫자의 영문이 들어있고 숫자의 영문을 숫자로 치환하여 정수형으로 반환하면 됩니다.
해결 과정 |
숫자의 명문과 그 숫자문자를 key와 value로 가지는 hashtable을 만듭니다. (unordered_map 사용하였습니다.)
본격적으로 문자열의 문자를 하나씩 가져와 알파벳인 경우에는 alpha_str이라는 string 객체에 붙여나가고 숫자인 경우에는 ans_str이라는 정답을 담는 string 객체에 담습니다. 이렇게 반복되어진 alpha_str의 값이
hashtable의 key로 존재할 때 string 객체를 반환string에 저장하고 alpha_str을 초기화하여 다음 문자부터 새로 받아
결국엔 ans_str을 완성하게 됩니다. 반환시에는 정수형이어야하기에 정수형으로 바꾸어 반환합니다.
코드 전문 |
#include <string>
#include <vector>
#include <unordered_map>
#include <cctype>
using namespace std;
int solution(string s) {
int answer = 0;
unordered_map<string, char> digi_alpha_table
{ {"zero", '0'}, {"one", '1'}, {"two", '2'},
{"three", '3'}, {"four", '4'}, {"five", '5'},
{"six", '6'}, {"seven", '7'}, {"eight", '8'}, {"nine", '9'} };
string ans_str{};
string alpha_str{};
for (auto ch : s)
{
if (isalpha(ch)) alpha_str += ch;
else ans_str.push_back(ch);
if (digi_alpha_table.find(alpha_str) != digi_alpha_table.end())
{
ans_str.push_back(digi_alpha_table[alpha_str]);
alpha_str.clear();
}
}
return stoi(ans_str);
}
느낀 점 (잡설 99% , 배운점 1%(많은 편)) |
더보기
cctype 라이브러리의 isalpha(para)함수도 그렇고 편리한 함수가 많네요. string의 push_back()에는 char형이 들어가고 unordered_map에 []연산자는 해당 key가 존재하지 않을 시 만들어주며 존재 시 해당하는 value를 반환해 줬습니다. unordered_map의 find()함수가 정말 효자였습니다. 테이블에서 존재하지 않을 시엔 end()를 반환해 줍니다.
긴 글 읽어주셔서 감사합니다.
부족한 점이 있다면 부디 알려주시면 감사하겠습니다.
'알고리즘 부셔버렷 > ProblemSolving' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 (문제 설명, 해결 과정, 코드 전문, c++) (0) | 2022.05.28 |
---|---|
[프로그래머스] 키패드 누르기 (설명, 해결 과정, 코드 전문, c++) (0) | 2022.05.27 |
[프로그래머스] 신규 아이디 추천 (0) | 2022.05.27 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2022.05.27 |
[프로그래머스] 신고 결과 받기 (문제 해결 과정, 코드 전문, C++) (0) | 2022.05.26 |
댓글