알고리즘/프로그래머스(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;
}