본문 바로가기
알고리즘

문자열압축_두가지버전(시뮬)

by kcj3054 2021. 12. 10.

설명

문자열 압축 예시를 들어보겠다

  • 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