c++/알고리즘

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

hojung 2022. 5. 8.
728x90
반응형

문제

프로그래머스 KAKAO 2020 Blind문제이다. 

여기에서 나는 c++을 이용하여 작성했으며 for문을 두 번 돌며 문제를 해결하여 O(n^2)으로 해결하였다. 

핵심은 substr함수를 얼마나 잘 사용하느냐와 인덱스의 이동을 얼마나 수학적으로 잘 표현할 수 있는가 였다. 

처음에 테스트 케이스를 돌릴 때 계속 3개가 틀려서 왜일까 고민했는데 

처음에 중복되는 문자의 개수가 1자리 수일 때만을 고려해서 실패한 사례가 존재하는 것이었다. 

int solution(string s) {
    int m = s.size() / 2;
    string temp;
    string copy = s;
    int si = 1;
    int minlength = copy.length();
    for (int i = 1; i <= m; i++)
    {
        temp = s.substr(0, i);
        for (int j = i; j <= copy.size(); j += i) {
            if (temp == copy.substr(j, i)) {
                si++;

            }
            else {
                if (si > 1) {
                    copy.replace(j - (si * i), (si - 1) * i, to_string(si));

                    j = j - ((si - 1) * i) + to_string(si).size();
                }
                si = 1;
                temp = copy.substr(j, i);


            }


        }
        cout << "i: " << i << " copy: " << copy << "\n";
        if (minlength > copy.length()) minlength = copy.length();

        copy = s;

    }
    cout << "minlength: " << minlength << "\n";
    return minlength;
}

따라서 다음 코드와 같이 이동하는 j인덱스를 j = j-(si-1) * i) + to_string(si).size()로 변경해주었더니 정상적으로 돌아갔다. 역시 배열의 인덱스를 다루는 문제는 까다로운 것 같다. 

728x90
반응형

'c++ > 알고리즘' 카테고리의 다른 글

[c++]조합  (1) 2022.05.13
[c++ DP] 다이나믹 프로그래밍 - 예제  (2) 2022.05.11
[C++] 백준- 1189 컴백홈 (완전탐색 + DFS)  (0) 2022.05.01
[C++]완전탐색  (0) 2022.04.29
[c++] 백준- 1436 영화감독 숌  (0) 2022.04.28

댓글