ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] 2020카카오공채 문자열 압축
    Algorithm/Programmers 2020. 8. 24. 19:50

    [Level 2]  문자열 압축

    https://programmers.co.kr/learn/courses/30/lessons/60057

    • 레벨 2 문제인데 문제를 제대로 이해하지 못해서 너무 오래 풀었다.. ㅠㅠ
    • 압축할 문자열 s가 매개변수로 주어질 째, 1개 이상 단위로 문자열을 잘라 압축하여 표현한 문자열 중 가장 짧은 것의 길이를 return 하도록 solution 함수를 완성하시오.
    • 헷갈렸던 포인트는 문자열을 앞에서 부터 n개씩 잘라야한다는 부분이 n=2, aa/ab/aa/dd/ee/... 같이 연속해서 n개로 압축하는 것이 아니라 aa/abcabcd/rr/dd/... 처럼 첫 부분만 2개로 잘리면 뒷부분에서는 자유롭게 2개씩 묶어 압축하는 방식으로 이해했다. 노답스;; 

     

    Solution

    • 완전 탐색으로 1~s.length()/2 조각에 대해 전부 압축한 다음, 최소값을 return 하는 방식으로 풀이했다.
    • s.length() % cut의 값인 exsit는 cut 보다 작은 조각 이므로 더이상 압축할 수 없어 마지막에 len 값으로 더해준다.

     

     

    소스코드

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import java.util.*;
    class Solution {
      public static int solution(String s) {
            int answer = s.length();
            int cut = 0;
            while (cut++ < s.length() / 2) {
                int count = 1;
                String prev = s.substring(0, cut);
                String cur = null;
                int len = 0;
                String exist = s.substring(s.length() - s.length() % cut);
                for (int i = cut; i <= s.length() - (exist.length() + cut); i += cut) {
                    cur = s.substring(i, i + cut);
                    if (prev.equals(cur)) {
                        count++;
                    } else {
                        if (count > 1) {
                            len += prev.length() + Integer.toString(count).length();
                        } else {
                            len += prev.length();
                        }
                        count = 1;
                        prev = cur;
                    }
                }
                if(count > 1) len += prev.length() + Integer.toString(count).length();
                else len += prev.length();
                answer = Math.min(answer, len + exist.length());
            }
            return answer;
        }
    }
    cs

    'Algorithm > Programmers' 카테고리의 다른 글

    [Programmers] 단체사진 찍기  (0) 2020.12.28
    [Programmers] 호텔 방 배정  (0) 2020.09.02
    [Programmers] 카카오프렌즈 컬러링북  (0) 2020.06.16
    [Programmers] 라면공장  (0) 2020.06.04
    [Programmers] 괄호 변환  (0) 2020.06.02

    댓글

Designed by Tistory.