프로그래머스/lv2/17684.[3차]압축 2018 KAKAO BLIND RECRUITMENT

SITY·2023년 10월 5일
0

Cpp_Algorithm

목록 보기
22/43

#include <string>
#include <vector>
#include <map>
using namespace std;

vector<int> solution(string msg) {
    vector<int> answer;
    map<string, int> m;

    int idx = 1;
    for (char i = 'A'; i <= 'Z'; i++)
        m[string(1, i)] = idx++;

    string temp = "";
    for (int i = 0; i < msg.size(); i++) {
        temp += msg[i];
        if (!m[temp]) {
            answer.push_back(m[temp.substr(0, temp.size() - 1)]);
            m[temp] = idx++;
            temp = "";
            i--;
        }
    }

    answer.push_back(m[temp]);
    return answer;
}

간단히 map에 기본적인 한자리 알파벳을 정의하고, 한개씩 읽어들이면서 temp에 넣어준다.
매 횟수마다 map을 체크하여 value값이 있다면 넘어간다.
그러나 value가 없는 문자열 key temp일 때, 그 값은 만들어서 넣어주어야 하는 문자열이기 때문에 answer에 현재 문자열 인덱스의 value값을 넣어주고, map에 새로 temp라는 key를 할당해준다.
그리고 한 칸 뒤로 이동해서 반복적으로 수행한다. 한 칸 미리 이동해서 계산을 했다고 생각하면 편하다.

개뻘짓을 자꾸 한다. 문제 이해를 제대로 빠르게 하기 위해 노력을 해야겠다.

profile
·ᴗ·

0개의 댓글