https://programmers.co.kr/learn/courses/30/lessons/60057
코딩테스트 연습 - 문자열 압축
데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자
programmers.co.kr
[문제 풀이]
1. 입력된 stinrg을 1의 크기부터 s.size()까지 compression을 돌립니다.
2. 그 후 들어온 크기로 잘라서 비교할 문자열을 temp에 넣습니다
3. 크기만큼 계속 비교하면서 같으면 overlap변수를 증가시켜주고 아니면 result 문자열에 추가하고 temp 문자열을
업데 이트시켜줍니다.
4. 비교하면서 끝인지 아닌지 계속 비교해줍니다
[코드]
#include <string>
#include <vector>
#include<iostream>
using namespace std;
int answer = 987654321;
void compression(string s, int num) {
int length = s.size();
int overlap = 1;
if (length <= num) {
if (s.size() < answer)
answer = s.size();
return;
}
string temp = s.substr(0, num);
string result;
for (int i = num; i < length; i = i + num) {
if (i + num > length) {
if (overlap == 1) {
result += temp;
temp = s.substr(i);
result += temp;
break;
}
else {
result += to_string(overlap);
result += temp;
temp = s.substr(i);
result += temp;
break;
}
}
if (temp == s.substr(i, num)) {
if (i + num == length) {
result += to_string(overlap + 1);
result += temp;
break;
}
else
overlap++;
}
else {
if (overlap == 1) {
if (i + num == length) {
result += temp;
temp = s.substr(i, num);
result += temp;
}
else {
result += temp;
temp = s.substr(i, num);
}
}
else {
if (i + num == length) {
result += to_string(overlap);
result += temp;
temp = s.substr(i, num);
result += temp;
}
else {
result += to_string(overlap);
result += temp;
overlap = 1;
temp = s.substr(i, num);
}
}
}
}
if (result.size() < answer)
answer = result.size();
}
int solution(string s) {
for (int i = 1; i <= s.size(); i++)
compression(s, i);
return answer;
}
'algorithm > 프로그래머스' 카테고리의 다른 글
프로그래머스_타겟 넘버(C++, JAVA) (0) | 2020.10.21 |
---|---|
프로그래머스_입국심사(C++) (0) | 2020.10.21 |
프로그래머스_카펫(C++, JAVA) (0) | 2020.04.28 |
프로그래머스_등굣길(C++, JAVA) (0) | 2020.04.26 |
프로그래머스_숫자 야구(C++) (0) | 2020.04.26 |