본문 바로가기
프로그래머스/Lv.2

[C++] 프로그래머스 문자열 압축 - 완전탐색

by MINU.SHINNNN 2023. 2. 18.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

완전탐색을 사용해서 풀이한다.

1. 압축 문자열을 저장하기 위한 a변수와 i개의 검사 문자열을 저장하기 위한 tmp변수를 선언한다.

2. i개의 검사할 문자열을 제어한다. 

3. 다음 i개의 문자열에 대해 기존(tmp)와 같다면 cnt 변수 ++, 아니라면 cnt를 a 변수에 더해주고 문자열을 더해준다. 이때, j+=i이다. 

4. 새로운 검사할 문자열을 지정하고 cnt변수 초기화 한다.

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

using namespace std;

int solution(string s) {
    int answer = 2147000;
    // 검사 길이
    string str;
    for (int i=1; i<=s.size(); i++){
        string a="";
        string tmp=s.substr(0, i);
        int cnt=1;
        
        for (int j=i; j<s.size(); j+=i){
            if (tmp == s.substr(j, i))
                cnt++;
            else{
                if (cnt != 1)
                    a += to_string(cnt);
                a+=tmp;
                tmp=s.substr(j, i);
                cnt=1;
            }
        }
        if (cnt>1) a+= to_string(cnt);
        a+=tmp;
        if (answer > a.size())
            answer = a.size();
    }
    return answer;
}