Programmers_문자열 압축

한상현·2021년 6월 10일
0

Algorithm

목록 보기
15/33

카카오는 항상 1번은 문자열장난을 많이 치는듯 하다.😳 무난하게 풀것만 같지만 하나씩 함정이 숨어있는 그런 느낌이다.

Programmers_ 문자열 압축

  • 이번 문제에도 함정이 존재했다.
  • 문자열을 n개의 묶음으로 묶을 때, 임의의 위치에서 시작할 수 있는 것이 아니라 첫 글자부터 n개로 묶어야 한다.
  • 쉽게 이해하기 위해서는 n개로 묶는다기보다는 처음부터 n개의 묶음으로 문자를 자르고 시작한다고 보면 될 것 같다.
  • 전형적인 카카오 1번 문제인 문자열 구현 이 합해진 문제.
  • 필자는 2중 for문을 사용해서 풀어봤다.
  • tmp 문자열에 직접 구현을 해줬지만, 굳이 이렇게 안하고 처음부터 s.size()를 저장한 int 변수에서 중복되는 수만큼 마이너스 시켜줘도 될 것 같다.

💻 전체 코드

#include <string>
#include <vector>

using namespace std;

int solution(string s)
{
    int answer = s.length();

    for (int i = 1; i <= s.length() / 2; i++)
    {
        int cnt = 1;
        string leftNum = s.substr(0, i);
        string tmp;
        for (int j = i; j < s.length(); j += i)
        {
            string rightNum = s.substr(j, i);
            if (leftNum == rightNum)
            {
                cnt++;
            }
            else
            {
                if (cnt > 1)
                    tmp += to_string(cnt);
                tmp += leftNum;
                leftNum = rightNum;
                cnt = 1;
            }
        }
        if (cnt > 1)
            tmp += to_string(cnt);
        tmp += leftNum;
        answer = min(answer, (int)tmp.size());
    }

    return answer;
}
profile
의 공부 노트.

0개의 댓글