문제설명
주어진 문자열을 입력 받고, 영단어로 된 단어를 숫자로 변환시켜 총 결과 숫자 값을 출력한다
알고리즘
1. 배열에 숫자영단어와, 숫자를 각각 저장해둔다
2. 반복문을 통해서 0부터 9까지 영단어가 있을때 숫자로 대체한다
3. 단, 같은 숫자가 나올 수 있기 때문에 반복하여 연산을 진행하되 탈출조건은 다음과 같다
3.1) 현재 연산중인 문자열을 정수로 바꾸고 다시 문자로 바꾸면 자릿수를 알 수 있다 -> 자릿수비교를 통해 동일하면 탈출
코드
#include <string>
#include <vector>
#include <iostream>
using namespace std;
string idx[10]={"zero","one","two","three","four","five","six","seven","eight","nine"};
string idx2[10]={"0","1","2","3","4","5","6","7","8","9"};
int solution(string s) {
int answer = 0;
while(1){
for(int i=0;i<10; i++){
if(s.find(idx[i])!= string::npos){ //찾으려는 영단어 수가 있는 경우
int index = s.find(idx[i]);//그 단어 시작점 idx
s.replace(index,idx[i].length(),idx2[i]);//숫자로 바꾸기
}
}
if(s.length() == to_string(stoi(s)).length()){ //아직 다 못 돈 수가 남아있는 경우
break;
}
}
answer = stoi(s);
return answer;
}
고찰
이번 문제는 알고리즘을 떠올리기는 어렵지 않았는데, 함수 사용법을 까먹고있어서 함수를 검색해서 풀었다
기초가 제일 중요한 것 같다
그리고 while문 안의 if조건을 for위에 실행해서 삽질을 했는데, 생각해보면 간단한 것이었다
연산을 한 세트 진행한 다음에 체크를 해야되는데, 시작하자마자 체크를 하니까 당연히 안돌아가는 케이스가 나왔다
'Algorithm' 카테고리의 다른 글
[백준 14503] 로봇 청소기 (0) | 2022.07.03 |
---|---|
[C++] lower_bound / upper bound/ 중복제거 (0) | 2022.07.03 |
[프로그래머스] 124 나라의 숫자 (0) | 2022.06.30 |
[백준 1946] 신입 사원 (0) | 2022.06.30 |
[백준 1107] 리모컨 (0) | 2022.06.30 |