끄적끄적 코딩
article thumbnail
728x90

2020 KAKAO BLIND RECRUITMENT (2020 카카오 블라인드 채용 문제)

문자열 처리하는 문제입니다.

문자열이 주어지고 문자를 n단위로 자를 수 있을 때 최소길이를 구하여야 합니다.

문자열의 최대길이가 1000이므로 완전탐색으로 문제를 풀었습니다.

1개 단위로 자르기
2개 단위로 자르기
3개 단위로 자르기
...
n개 단위로 자르기


다음과 같은 순서로 문제를 해결하였습니다.

1. 연속 같은 문자의 처리, 연속하지 않은 문자 처리
2. 자르는 중 자를 수 없는 단위가 남은 경우 count에 추가
3. 연속해서 같은 문자가 나오는 경우 10의자리 100의자리 1000의 자리 처리해주기
4. 문자가 한글자인 경우

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(string s) {
    int answer = 1000;
    int count = 0;
    int continuity = 0;
    int length = s.length();
    string text = "";
    if(length == 1){
        return 1;
    }
    for(int i=1; i<=length/2; ++i){
        count = 0;
        continuity =0;
        for(int j=0; j<length; j+=i){
            if(length < j + i){               
                count += length - j;
                break;
            }
            if(text == "" || text != s.substr(j, i)){
                text = s.substr(j, i);    
                count += i;
                continuity = 0;
            } 
            else {
                ++continuity;
                if(continuity == 1 || continuity == 9 || continuity == 99 || continuity == 999 ){
                    count++;
                }
            }
        }
        answer = min(answer, count);
        count = 0;
        text = "";
    }
    
    return answer;
}

검색 태그