[프로그래머스] 영어가 싫어요 - c++

삼식이·2025년 5월 6일
0

알고리즘

목록 보기
43/81

영어가 싫어요

이 문제를 풀면서 for문의 i 값을 수동으로 조절할 수 있다는 점을 알게 되었다!

코드는 다음과 같다.

#include <string>
#include <vector>
#include <map>
#include <iostream>

using namespace std;

long long solution(string numbers) {
    long long answer = 0;
    string tmp = "";
    map<string, int> mp = {
        {"zero", 0}, {"one", 1}, {"two", 2}, {"three", 3}, {"four", 4},
        {"five", 5}, {"six", 6}, {"seven", 7}, {"eight", 8}, {"nine", 9}
    };

    for(int i=0; i<numbers.size(); i++) {
        for(auto a : mp) {
            if (numbers.substr(i, a.first.size()) == a.first) {
                tmp += to_string(a.second);
                i += a.first.size() - 1;
                break;
            }
        }
        
    }
    answer = stol(tmp);
    return answer;
}

for 문에서는 자동으로 i값이 1씩 증가하도록 설정해놨었다.

for(int i=0; i<numbers.size(); i++) {
        for(auto a : mp) {
            if (numbers.substr(i, a.first.size()) == a.first) {
                tmp += to_string(a.second);
                i += a.first.size() - 1;
                break;
            }
        }
    }

만약 문자열을 찾으면 해당 문자열에 맞는 숫자를 tmp에 더하고
그 문자열 길이 다음만큼의 문자열을 다시 조사해야했다.

하지만 수동으로 i를 조절해도 괜찮을지 확신이 안섰다.

하지만 실행해보니 잘 돌아갔다.

결과적으로, i++는 자동으로 증가하지만, i += a.first.size() - 1;을 통해 i의 증가량을 수동으로 조정하여 더 빠르게 문자열을 처리할 수 있었다.

0개의 댓글