본문 바로가기
전공공부/코딩테스트

(c++) 프로그래머스 "[3차] 압축"

by 시아나 2022. 4. 28.

https://programmers.co.kr/learn/courses/30/lessons/17684

 

코딩테스트 연습 - [3차] 압축

TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]

programmers.co.kr


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

using namespace std;

vector<int> solution(string msg) {
    vector<int> answer;
    map<string, int> m;
    int index = 1;
    for (char c = 'A'; c <= 'Z'; c++) {
        string tmp; tmp += c;
        m.insert({ tmp,index++ });
    }
    for (int i = 0; i < msg.size(); i++) {
        string search; search += msg[i];
        while (i < (msg.size() - 1) && m.find(search + msg[i + 1]) != m.end()) {
            search += msg[++i];
        }
        answer.push_back(m.find(search)->second);
        if (i < (msg.size() - 1)) {
            m.insert({ search + msg[i + 1],index++ });
        }
    }
    return answer;
}