알고리즘 공부

less than 1 minute read

문자열 압축 - 카카오 공채 기출
https://programmers.co.kr/learn/courses/30/lessons/60057
계속 개수를 같은지 그 개수만큼 맨끝까지 돌리는 부분에서 헷갈렸다.
꼼꼼히 tc 생각하는 습관!

#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    int answer = s.length();
    if (answer == 1) return 1;

    for (int i = 1; i <= s.length() / 2; i++) {
        string result = "";
        int cnt = 1;
        string tmp1 = s.substr(0, i);

        for (int j = i; j < s.length(); j += i) {
            string tmp2 = s.substr(j, i);

            if (tmp1 == tmp2) {
                cnt++;
            } else {
                if (cnt == 1) {
                    result += tmp1;
                    tmp1 = tmp2;
                } else {
                    result = result + to_string(cnt) + tmp1;
                    tmp1 = tmp2;
                    cnt = 1;
                }
            }
            if (i + j >= s.length()) {
                if (cnt == 1) {
                    result += s.substr(j);
                    break;
                } else {
                    result = result + to_string(cnt) + tmp1;
                    break;
                }
            }
        }
        if (result.length() < answer) {
            answer = result.length();
        }
    }
    return answer;
}


소요시간 : 1시간