맵을 이용해서 푸는 문제인건 바로 알 수 있었다
하지만 매칭되지 않으면 빈문자열이 나온다는 점과 매칭되지 않으면 문자를 변수에 저장하고 다음 문자와 합쳐서
합쳐진 변수로 맵과 비교하는 것을 반복하는 점, map 을 외부 함수로 선언 시, 맵을 참조 가능하려면 함수 호출을
해야 되는 점... 많이도 몰랐다
맵은 외부에서 함수로 따로 초기화 외에도 함수 내부에서 초기화 할 수도 있다
#include <bits/stdc++.h>
using namespace std;
unordered_map<string, string> mapi;
void cov(){ // mapi 을 초기화한 참조데이터를 함수로 따로 만들어 두었다
mapi["zero"]="0"; // 이 경우 mapi 이 전역 변수 이므로
mapi["one"]="1"; // 여러 함수에서 호출해서 mapi을 사용가능하다
mapi["two"]="2";
mapi["three"]="3";
mapi["four"]="4";
mapi["five"]="5";
mapi["six"]="6";
mapi["seven"]="7";
mapi["eight"]="8";
mapi["nine"]="9";
}
int solution(string s) {
int answer = 0;
string ret=""; // 문자 임시로 담아 map에 비교할 그릇
string tok=""; // 완성 문자열
cov(); // mapi 를 사용하기 위해 참조할 데이터 호출
// mapi["zero"]="0"; // 외부 map 참조 함수 cov 호출 없이
// mapi["one"]="1"; // 이렇게 사용 함수 내부에 초기화해도 된다
// mapi["two"]="2";
// mapi["three"]="3";
// mapi["four"]="4";
// mapi["five"]="5";
// mapi["six"]="6";
// mapi["seven"]="7";
// mapi["eight"]="8";
// mapi["nine"]="9";
for(int i=0; i<s.length(); i++){
if(isdigit(s[i])){
tok+=s[i];
} else { // 숫자가 아니면 아래 실행
ret+=s[i];
if(mapi[ret] != ""){ // ret 이 mapi에 있다면 (없으면 빈문자열임)
tok+=mapi[ret]; // 있는 것이니 그 value 를 완성 문자열에 더하고
ret=""; // ret 을 초기화 해준다
}
}
}
answer=stoi(tok); // 문자열을 정수로 형변환
return answer;
}
'개발 노트 > 백준, 프로그래머스 풀이' 카테고리의 다른 글
[백준 9012/c++] 괄호 - 문자열 - 스택 (0) | 2022.06.23 |
---|---|
[백준 4673/c++] 셀프 넘버 (0) | 2022.06.23 |
[프로그래머스 1 / c++] 비밀 지도 (0) | 2022.06.22 |
[프로그래머스 1 / c++] 다트 게임 (0) | 2022.06.22 |
stringstream 문자열 입력 버퍼, 자료형이 섞인 string 을 다룰때 사용 (0) | 2022.06.22 |
댓글