본문 바로가기
Problem Solving

[c++][프로그래머스] 문자열 압축

by wadekang 2022. 2. 15.

프로그래머스 문자열 압축 [2020 KAKAO BLIND RECRUITMENT]
https://programmers.co.kr/learn/courses/30/lessons/60057#
 

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

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

programmers.co.kr

문제 풀이

  • 이 문제는 문자열 처리 문제입니다. 
  • 1부터 str.length()/2까지 문자열을 잘라 압축해 보면서 가장 짧게 압축이 됐을 때 문자열의 길이를 리턴합니다. 
  • 압축 방법은 코드를 참고해주세요!

코드

#include <string>
#include <vector>

using namespace std;

int string_compress(string s, int unit) {
    vector<string> v; // 잘린 문자열 저장
    vector<int> count; 
    int idx = -1;
    
    for(int i=0; i<s.length(); i+=unit) {
        string temp = s.substr(i, unit); // 단위에 따라 문자열 자른 후 
        
        if(!v.empty() && v.back() == temp) 
        	count[idx]++; // 같은 문자열이 앞에 있다면 count 증가
        else { 
            v.push_back(temp);
            count.push_back(1);
            idx++;
        }        
    }
    
    string res = "";
    for(int i=0; i<v.size(); ++i) {
        if(count[i] > 1) res += to_string(count[i]); // 1 이상일때만 숫자 붙임
        res += v[i];
    }
    
    return res.length();
}

int solution(string s) {
    int answer = s.length();
    
    for(int i=1; i<=s.length()/2; ++i) {
        int len = string_compress(s, i);
        
        answer = min(answer, len);
    }
    
    return answer;
}

실행 결과

 

댓글