프로그래머스 - 문자열 압축
본문 바로가기
알고리즘 모음집/New 알고리즘

프로그래머스 - 문자열 압축

by KyeongMin 2020. 9. 11.
728x90
반응형

programmers.co.kr/learn/courses/30/lessons/60057#

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자

programmers.co.kr

 

 

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

int solution(string s) {
	int ret = 0x7fffffff;
	int answer = 0;
	
	for (int c = 1; c <= s.size(); c++) {
		int idx = 0;
		string copyS[1001];
		answer = 0;
		for (int i = 0; i < s.size();) {
			int C = c;
			while (C--) {
				if (i == (s.size()))break;
				copyS[idx].push_back(s[i++]);
			}
			idx++;
		}
		for (int i = 0; i < idx;) {
			int cnt = 1;
			int ci = 0;
			for (int j = i + 1; j < idx; j++) {
				if (copyS[i] == copyS[j]) {//압축 가능한경우
					cnt++;
				}
				else {
					if (cnt != 1) {//개수 포함 저장
						answer+=to_string(cnt).size();
						answer += copyS[i].size();
					}
					else if (cnt == 1) {//1은 제외 하고 저장
					 answer += copyS[i].size();
					}
					i = j;
					if (i == idx - 1) {
						answer += copyS[i].size();
						i++;
					}
					break;
				}
				ci = j;
			 }
			if (ci == idx - 1) {
				i = idx;
				if (cnt != 1) {//개수 포함 저장
					answer += to_string(cnt).size();
					answer += copyS[i-1].size();
				}
				else if (cnt == 1) {//1은 제외 하고 저장
					answer += copyS[i-1].size();
				}
			}
		}
		
		ret = ret > answer ? answer : ret;
	}
	return ret;
}
int main(void) {
	cout << solution("aaaaaaaaaa");
	return 0;
}

처음에 이게 당황 스러운게 문자열을 나누는것은 빠른데 카운트 세는것도 문자열로 해서 길이로 계산해야합니다. 이런점만 잘 포인트 살리면 패스 가능합니다.!!!!

728x90
반응형

댓글