본문 바로가기

Language/C++

[프로그래머스][Level2][C++][String] 2018 KAKAO BLIND RECRUITMENT[3차] - 압축 - 컴도리돌이

728x90
728x90
 

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

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

programmers.co.kr

 

  1.  A~Z 까지 map 함수에서 값을 저장한다.
  2.  반복문으로 msg 길이만큼 실행 시킨다.
  3.  임시 string w에 msg값을 저장하여 해당 값이 map 함수에 있는지 조사한다. 만약 있을 경우 msg의 다음 문자를 탐색하기 위해 j값을 1 증가 시키고 w값에 다음 msg 값을 저장한다.
  4.  탐색도중 해당 string w를 찾지 못했으면 while문에 빠져나와서 map 함수에 해당 w 에 대한 값을 업데이트 시킨후 벡터 함수 answer에 w의 전 값을 저장한다. w의 전 값은 단순히 pop_back()을 사용한다.
string(1, 'A' + i)을 이용해서 char 값을 string으로 접근.
#include <string>
#include <vector>
#include <map>

using namespace std;

vector<int> solution(string msg) {
    vector<int> answer;
    map<string,int> LZW;
    int idx = 0;

    for(idx; idx< 26; idx++) LZW[string(1,'A' + idx)] = idx + 1;

    for(int i =0,j=i,count = 0; i< msg.size(); i++,count = 0)
    {
        string w = "";
        w += msg[i];
        while(LZW.find(w) != LZW.end()) count++,j++,w += msg[j];

        idx++,count--,i += count,LZW[w] = idx;

        w.pop_back();
        answer.push_back(LZW[w]);
    }
    return answer;
}
728x90
728x90