[#76][알고리즘] 문자열 인코딩하기(Run Length Encoding)

코딩 테스트 대비 > 문자열 압축하기(Run Length Encoding)


문제
문자열을 압축한다. RLE(Run Length Encoding) 방법으로, 문자열을 나타난 횟수만큼 숫자와 문자로 표시한다. 예를 들어, AAAAAADDC일 때 A는 6개, D는 2개, C는 1개이므로 6A2D1C를 출력한다.

입력

첫 줄에는 입력받을 단어의 갯수 T
두번째 줄 부터는 T개의 문자열 단어 입력받음 (단어의 길이는 1자~200자)
단어에 사용되는 글자의 종류는 알파벳 대문자만 사용한다.

출력

문자열 압축한 결과 출력.

예제 입력 1 

3
AAAAAADDC
AADDKKJJLL
AJEKAL

예제 출력 1 

3
6A2D1C
2A2D2K2J2L
1A1J1E1K1A1L


C++풀이
#include <iostream>
#include <string>
using namespace std;
 
int main() {
    int T, count, pos;
    string input;
    scanf("%d"&T);
    cin.ignore();
 
    for (int i = 0; i < T; i++) {
        getline(cin, input);
 
        //필요한 변수 초기화
        count = 1;    pos = 0;
 
        //입력이 1글자 일 경우
        if (input.length() == 1) {
            cout << 1 << input << endl;
            continue;
        }
 
        while (pos < (input.length()-1)) {
            //현재위치와 다음위치의 문자가 같은 경우
            if (input.at(pos) == input.at(pos + 1)) {
                count++;
                //다음 위치가 문자열의 끝인 경우
                if (pos+1 == input.length() - 1) {
                    //결과 출력
                    cout << count << input.at(pos);
                    break;
                }
            }
            
            //현재위치와 다음위치의 문자가 다른 경우
            else if (input.at(pos) != input.at(pos + 1)) {
                //이제까지의 count와 그 문자 출력
                cout << count << input.at(pos);
                //count = 1로 조정
                count = 1;
            }
            //위치값 +1
            pos++;
            
            //검사할 문자열이 맨 끝인 
            if (pos == input.length() - 1) {
                cout << 1 << input.at(pos);
            }
        }
        cout << "\n";
    }
 
    return 0;
}
cs


댓글

가장 많이 본 글