Programmers 60057 문자열 압축

로고 이미지

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/60057

나의 풀이

압축하는 단위를 1부터 string의 길이까지 각각의 압축하여 표현한 문자열의 길이를 구한 후 가장 짧은 값을 return한다.

풀이 코드 : 60057 문자열 압축

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int get_count(int count){
    int res = 0;
    while(count){
        count/=10;
        res++;
    }
    return res;
}

int get_length(string s,int n){
    vector<string> split_str;
    for(int i=0;i<s.size()/n;i++){
        string str = s.substr(i*n, n);
        split_str.push_back(str);
    }
    int count = 1;
    int res = 0;
    
    for(int i=0;i<split_str.size();i++){
        if(i == split_str.size() -1 ){
            res += n;
            if(count > 1) res += get_count(count);
        }
        else if(split_str[i].compare(split_str[i+1]) == 0){
            count++;
        }
        else{
            res += n;
            if(count > 1) res += get_count(count);
            count = 1;
        }
    }
    if(s.size()%n != 0){
        res += s.size()%n;
    }
    return res;
}

int solution(string s) {
    int answer = 1000;
    for(int i=1;i<=s.size();i++){
        int res = get_length(s, i);
        if(res < answer) {
            answer =res;
        }
    }
    return answer;
}

int main(){
    string s = "a";
    cout<<solution(s);

}

채점결과

42586


© 2020. All rights reserved.

Powered by Hydejack v8.4.0