알고리즘/프로그래머스(C++)
[프로그래머스/알고리즘] 압축
chaibin
2019. 2. 18. 20:53
입출력 예제
msg : TOBEORNOTTOBEORTOBEORNOT
answer : [20,15,2,5,15,18,14,15,20,27,29,31,36,30,32,34]
해결 방법
처음에 문자를 1개씩 합쳐봅니다. 저는 temp 라는 곳에 T를 넣었을 때 사전에 있으면 TO도 찾아봅니다. TO가 없을 때 이 문자를 index(사전)에 집어넣는 방법을 이용해서 풀면 해결이 됩니다.
C++로 저는 find함수를 이용해서 데이터를 찾아냈습니다.
그리고 해당 번호는 find를 찾았을때 iterator로 반환되는데 iterator-벡터 시작의 값을 이용해서 색인 번호를 찾아낼 수 있습니다.
소스코드
#include <string> #include <vector> #include <algorithm> using namespace std; vector<int> solution(string msg) { vector<string> index = { "0","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P", "Q","R","S","T","U","V","W","X","Y","Z" }; vector<int> answer; bool flag = true; vector<string>::iterator iter; int j; for (int i = 0; i < msg.size(); i++) { flag = true; string temp=""; while (flag) { temp += msg[i]; iter = find(index.begin(), index.end(), temp); if (iter != index.end()) { j = iter-index.begin(); i++; } else { flag = false; answer.push_back(j); index.push_back(temp); i--; } } } return answer; }