# 사용하지 않는 게시글/알고리즘 문제

[프로그래머스 - 구현] 압축 (for kakao)

cy_mos 2019. 8. 13. 13:08
반응형

[프로그래머스 - 구현] 압축


📄 [구현] 압축 C++ Source Code

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

/*	LZW 압축은 다음 과정을 거친다.

	ⓐ 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다.
	ⓑ 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다.
	ⓒ w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다.
	ⓓ 입력에서 처리되지 않은 다음 글자가 남아있다면(c), w+c에 해당하는 단어를 사전에 등록한다.
	ⓔ 단계 2로 돌아간다.
*/

#define INT_PAIR pair<int, int>

// ※ CAPTION - 압축 알고리즘이 영문 대문자만 처리한다고 한다.
vector<int> solution(string msg) {

	vector<int> answer;
	unordered_map<string, int> dict;

	// ⓐ 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다.
	for (int ii = 'A'; ii <= 'Z'; ii++) {
		const auto key = std::make_pair(string(1, ii), ii - 'A' + 1);
		dict.insert(key);
	}
	
	string word = string();
	for (int ii = 0; ii < msg.size(); ii++) {
		// ⓔ 단계 2로 돌아간다.
		word += msg[ii];
		
		// ⓑ 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다.
		if (dict.find(word) == dict.end()) {
			const auto key = std::make_pair(word, dict.size() + 1);
			dict.insert(key);

			// ⓒ w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다.
			word = word.substr(0, word.size() - 1);
			answer.push_back(dict[word]);
			word.clear(), ii--;
		}
	}

	// ⓓ 입력에서 처리되지 않은 다음 글자가 남아있다면(c), w+c에 해당하는 단어를 사전에 등록한다.
	if (word.size() > 0) { answer.push_back(dict[word]); }

	// 주어진 문자열을 압축한 후의 사전 색인 번호를 배열로 출력하라.
	return answer;
}

🚀 REFERENCE

 

코딩테스트 연습 - [3차] 압축 | 프로그래머스

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

programmers.co.kr

 

ChangYeop-Yang/Study-Algorithm

수학과 컴퓨터 과학, 언어학 또는 관련 분야에서 어떠한 문제를 해결하기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말한다. 알고리즘은 연산, 데이터 진행 또는 자동화된 추론을 수행한다. - ChangYeop-Yang/Study-Algorithm

github.com

 

알고리즘 카카오 신입 공채 3차 코딩 테스트 2번 압축 (자바로 구현하기!!)

알고리즘 카카오 신입 공채 3차 코딩 테스트 2번 압축 (자바로 구현하기!!) 압축 신입사원 어피치는 카카오...

blog.naver.com

 

반응형