250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(프로그래머스 c++ KAKAO)문자열 압축 본문
728x90
반응형
우선 answer에 s.size()를 넣어주어 최댓값으로 설정한다..!
이중 for문 중에서 첫 번째 for문은 자를 문자의 개수를 나타낸다.
cnt 변수는 같은 문자의 개수를 나타내고, tmp 변수는 압축한 문자열의 총 크기를 나타낸다.
current 문자열은 s[0] ~ s[i]개 까지 자른 문자열을 나타낸다.
두 번째 for문에서는 s 문자열에서 current와 같은 문자열이 있는지 확인하는 반복문이다.
current == s.substr(j, i)가 같다면 cnt++을 해준다.
만약 두 문자열이 같지 않다면 tmp에 자른 문자열의 길이를 더해준다.
이때, cnt가 1이라면 자른 문자열의 길이만 더해주고,
1이 아니라면 cnt를 문자열로 변환했을 때의 길이 + 자른 문자열의 길이를 더해준다.
(같은 문자가 1번 나오면 1은 생략하라고 했기 때문..!)
두 번째 for문을 빠져나오면 마지막으로 자른 문자열의 길이를 더해주지 않았기 때문에
똑같은 방식으로 tmp에 더해준다.
마지막으로 answer와 tmp를 비교해서 더 작은 길이를 answer에 넣어주고 반복하면 끝...!
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(string s) {
int answer = s.size();
for(int i = 1; i <= s.size() / 2 + 1; i++)
{
int cnt = 1, tmp = 0;
string current = s.substr(0, i);
for(int j = i; j < s.size(); j += current.size())
{
if(current == s.substr(j, i))
cnt++;
else
{
if(cnt == 1)
tmp += current.size();
else
tmp += (to_string(cnt).size() + current.size());
current = s.substr(j, i);
cnt = 1;
}
}
if(cnt == 1)
tmp += current.size();
else
tmp += (to_string(cnt).size() + current.size());
answer = tmp < answer ? tmp : answer;
}
return answer;
}
728x90
반응형
'프로그래머스 알고리즘 > KAKAO' 카테고리의 다른 글
(프로그래머스 c++ KAKAO)튜플 (0) | 2020.05.26 |
---|---|
(프로그래머스 c++ KAKAO)카카오 프렌즈 컬러링북 (3) | 2020.05.08 |
(프로그래머스 c++ KAKAO)다트 게임 (0) | 2020.05.01 |
(프로그래머스 c++ KAKAO)실패율 (0) | 2020.04.30 |
(프로그래머스 c++ KAKAO)[1차]비밀지도 (0) | 2020.04.30 |