[#77][알고리즘] 문자열 압축

코딩 테스트 대비 > 문자열 압축

문제

문자열을 압축한다.GOOOOOOOOD을 압축하면 1G8O1D이다. 만약, 문자열 압축 후의 길이가 압축 전 보다 길다면, 입력받은 문자열을 그대로 출력한다.

입력

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

출력

문자열 압축한 결과 출력.

예제 입력 1 

3
GOOOOOOOODBYE
HANWHA
SSSSSSSSSONG

예제 출력 1 

1G8O1D1B1Y1E
HANWHA
9S1O1N1G
C++풀이
#include <iostream>
#include <string>
using namespace std;
int main() {
    int T, count, pos;
    string input, output;
    scanf("%d"&T);
    cin.ignore();
    for (int i = 0; i < T; i++) {
        getline(cin, input);
        //필요한 변수 초기화
        count = 1;    pos = 0; output = "";
        while (pos < (input.length() - 1)) {
            if (input.at(pos) == input.at(pos + 1)) {
                count++;
                if (pos + 1 == input.length() - 1) {
                    output+= to_string(count) + input.at(pos);
                    break;
                }
            }
            else if (input.at(pos) != input.at(pos + 1)) {
                output+= to_string(count) + input.at(pos);
                count = 1;
            }
            pos++;
            if (pos == input.length() - 1) {
                output += to_string(1+ input.at(pos);
            }
        }    
        //output과 input의 길이를 비교해 output이 더 길면 input그대로 출력
        if (output.length() > input.length()) {
            cout << input << endl;
        }
        else {
            cout << output << endl;
        }
    }
    return 0;
}
cs

댓글

  1. 이런거는 어찌할까요
    aaccaaccaacc
    2a2c2a2c....가아니라
    3aacc가 나와야하는뎅..

    답글삭제

댓글 쓰기

가장 많이 본 글