설명
문자열 압축 예시를 들어보겠다
- aaabbbbcaa이면 -> a3b4c1a2가된다.
복잡한 소스
더러운 풀이이다.
왜냐 현재, 현재 + 1로 보면서 이동하면서 넣어주기는한데 기준점이 명확하지가 않다. s[i]이긴한데 명확하게 보이지않는다. ... 그리고 시작을 s[0]을 넣어두고 시작을 i = 1 인덱스부터 시작하는 것이 더 명확한 것같다.
/aaabbbbc, aa
a3b4c1
int cnt = 1;
tmp = "";
char tmp_char ='0';
for (int i = 0; i < (int)s.size() - 1; i++) {
if (s[i] == s[i + 1]) {
tmp_char = s[i];
cnt++;
}
else {
tmp += tmp_char;
tmp += to_string(cnt);
cnt = 1;
}
}
if (cnt >= 1) {
tmp += tmp_char;
tmp += to_string(cnt);
}
깔끔한 소스
밑의 소스는 일단 첫번째 문자열을 기준으로 잡으면서 시작하는 것이다 기준으로 잡으면서 다른 변수에 넣어둔다. char curr_char = s[0]
그후 1번 인덱스부터 시작해서 기준 문자와 같다면 cnt++로 증가하다가, 만약 기준과 다르다면 기준 문자열을 tmp 합치고, 현재까지 증가한 cnt도 합친다
그후에 기준 문자열을 변화시킨다 curr_char = s[i]
매우 깔끔한 풀이
int Encoding() { char curr_char = s[0]; int cnt = 1; tmp = ""; for (int i = 1; i < (int)s.size(); i++) { if (s[i] == curr_char) { cnt++; } else { tmp += curr_char; tmp += to_string(cnt); curr_char = s[i]; cnt = 1; } } tmp += curr_char; tmp += to_string(cnt); return (int)tmp.size(); }
'알고리즘' 카테고리의 다른 글
길 찾기 게임 (c++) (0) | 2021.12.15 |
---|---|
백준 중량제한 1939(c++) (0) | 2021.12.13 |
1차원 격자(시뮬레이션, 비공풀이) (0) | 2021.12.08 |
백준 가운데를 말해요 1655 (c++) (0) | 2021.12.07 |
백준 중앙값 구하기, 2696 (c++) (0) | 2021.12.07 |