코딩테스트 문제풀이/프로그래머스

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

itaeiou 2020. 2. 26. 17:30
반응형

프로그래머스

카카오 2020 블라인드 테스트

 

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

 

코딩테스트 연습 - 문자열 압축 | 프로그래머스

데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 aabbaccc의 경우 2a2ba3c(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    int answer = s.length();
    int length = s.length();
 
    if(s.length() == 1)
        return 1;
 
    for(int i = 1; i <= length / 2; i++){ //비교 갯수 지정
        int count = 1;
        string f = s.substr(0, i);
        string cmp, cp;
 
        for(int j = i; j < length; j += i){ //처음부터 쭉 비교하기
            cmp = s.substr(j, i);
 
            if(!(f.compare(cmp)))  //비교 문자가 같으면 count 증가
                count++;
            else{
                if(count == 1){
                    cp += f;
                    f = cmp;
                }else{
                    cp = cp + to_string(count) + f;
                    f = cmp;
                    count = 1;
                }
            }
            
            if(j + i >= length){  //마지막에 substr기준을 초과한 경우
                if(count != 1){
                    cp = cp + to_string(count) + f;
                    break;
                }else{
                    cp = cp + s.substr(j);
                    break;
                }
            }
        }
        answer = (answer > cp.length()) ? cp.length() : answer;
    }
    
    return answer;
}

 

 

참고

https://hwan-shell.tistory.com/118

 

2020 카카오 공채 : 문자열 압축 (풀이 및 코딩)

조건은 s의 길이가 1 이상 1,000 이하.... 모든 알파벳은 소문자 입니다. 해당 코드는 2중 for문으로 충분히 풀이가 가능하고 탐색 조건도 쉽습니다. 앞에서부터 문자들을 차례대로 비교하면 됩니다. 처음엔 1개..

hwan-shell.tistory.com

 

반응형