본문 바로가기

알고리즘/프로그래머스

[프로그래머스/C++] 알고리즘 - 문자열 압축

 

안녕하세요! 테크지니어22입니다.

오늘은 프로그래머스 알고리즘 문자열 압축을 풀어보도록 하겠습니다.

 

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

 

프로그래머스

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

programmers.co.kr

 

 

[문제 접근]

문자열을 활용한 단순 구현문제입니다.

 

[풀이 전략]

중복이 되지 않는 경우는 중복개수 1을 추가할 필요가 없다는 부분에 유의하여 구현을 하면 됩니다.

주의할 점은 문자열이 한 개 인경우에는 answer초기값이 출력되기 때문에 이에 대한 예외처리가 필요합니다.

 

[코드]

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <queue>

using namespace std;

int solution(string s) {
    int answer = 1001;
    if(s.length() == 1) return 1 ;
    for(int i = 1 ; i <= (s.length() / 2) ; i++) {
        string prevStr = s.substr(0, i);
        int cnt = 1 ; 
        string compressed = "";
        for(int j = i ; j < s.length() ; j+=i) {
            string tmpStr = s.substr(j, i);
            
            if(prevStr != tmpStr) {
                compressed += (cnt > 1) ? to_string(cnt) + prevStr : prevStr;
                prevStr = tmpStr;
                cnt = 1 ;  
            } else {
                cnt++;
            }
        }
        
    compressed += (cnt > 1) ? to_string(cnt) + prevStr : prevStr; 
        
    if(compressed.length() < answer) answer = compressed.length() ; 
    }
    return answer;
}

 

[배울 점]

- 문제를 정확히 이해하는데 시간 할애하기