[#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
36A2D1C 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 |
댓글
댓글 쓰기