hyunjin

[level 2] 카카오2020 문자열 압축 , substr 본문

알고리즘 연습/프로그래머스

[level 2] 카카오2020 문자열 압축 , substr

_h.j 2020. 7. 20. 13:42
728x90

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

 

 

첫 번째 풀이

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

using namespace std;

int solution(string s) {
    int answer = s.length();
    stack <string> stack1;
    stack <int> stack2;
    string unit;
    int cnt=0;
    for(int i = 1 ; i < s.length()/2+1 ;i++){
        for(int j = 0; j<s.length();j+=i){ 
          
            if(stack1.empty()){
                stack1.push(s.substr(j,i));
                stack2.push(1);
                continue;
            }
            
            unit = stack1.top();
          
            if(unit.compare(s.substr(j,i)) == 0){
                cnt = stack2.top()+1;
                stack2.pop();
                stack2.push(cnt);
            }
            else{
                stack1.push(s.substr(j,i));
                stack2.push(1);
            }
            
        }
        cnt = 0;
        while(!stack1.empty()){
            cnt += (stack1.top()).length();
            if(stack2.top() != 1) 
                cnt +=(  to_string(stack2.top()) ).length();
            stack1.pop();
            stack2.pop();
        }   
        if(cnt < answer)
            answer= cnt;
        
    }
    
    return answer;
}

stack1 : 문자열 유닛을 담는 스택

stack2 : 문자열 횟수를 넣는 스택

stack1의 맨 위 요소와 문자열 유닛을 비교해 같으면 stack2 맨 위 값을 +1 해준다.

 

배운 내용

  • str(위치, 개수) : string의 서부 sub tring
  • to_string 
    • 헤더 파일 : string
728x90