Algorithm

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

moguogu 2022. 7. 1. 17:35

문제설명

주어진 문자열을 입력 받고, 영단어로 된 단어를 숫자로 변환시켜 총 결과 숫자 값을 출력한다

알고리즘

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