본문 바로가기
문제 풀이/프로그래머스 (Programmers)

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

by 희조당 2021. 9. 20.
728x90

https://programmers.co.kr/learn/courses/30/lessons/60057

 

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

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

programmers.co.kr


 문제 풀이

브루트 포스로 접근했다! 

 

첫 반복문의 최대 반복 회수는 입력받은 문자열의 반만큼인데,

단위가 입력받은 문자열의 길이의 반 이상이라면 압축하는 의미가 없기 때문이다. 

 

다음 반복문에선 비교를 통해서 반복되는지 확인해준다.

같다면 압축 회수(=cnt)를 증가시키고 아니라면 str에 입력해준다.

 

최종적으론 현재 answer와 str의 길이를 비교해서 더 작은 값을 answer에 저장해서 출력한다!

 느낀 점

제일 짧은 길이를 리턴하기 위해서 min 함수를 사용하려고 했는데 <algorithm> 헤더를 추가해도 계속 오류가 발생했다. 왜 발상했는지 좀 찾아보아야 할 것 같다. 단계적으로 문제를 풀어나가면 쉽게 풀릴만한 난이도였던 것 같다.

 코드

#include <string>

using namespace std;

int solution(string s) {
    int answer = s.length();
    
    for (int i = 1;i <= s.size() / 2;i++) {
        string tmp = "";
        string str = "";

        int cnt = 1;
        tmp = s.substr(0, i);

        for (int j = i;j < s.size();j += i) {
            if (tmp == s.substr(j, i))
                cnt++;
            else {
                if (cnt > 1)
                    str += to_string(cnt);
                str += tmp;
                tmp = s.substr(j, i);
                cnt = 1;
            }
        }

        if (cnt > 1) str += to_string(cnt);
        str += tmp;
        if (answer > str.size()) answer = str.size();
    }

    return answer;
}

댓글