티스토리 뷰

 

 

코딩테스트 연습 - 문자열 압축

데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문

programmers.co.kr

풀이

  • 카카오 2020 블라인드 1차코테에 나왔던 문제이다.

그당시 예외처리하고 하느라 은근 오래걸렸던 것 같은데 그동안 짬바(?)가 쌓였는지 저번보단 적게, 수월하게 풀었다





  • 특정한 규칙이 보이지 않아 모든 케이스를 다 구해야 하구나.. 생각했다.
  • 문자열을 자를 수 있는 개수를 전부 돌려보면서 비교했다.
  • StringBuillder로 하나씩 붙여나갔다.
  • 자른 문자열 이전 값과 다음 값을 비교해주며 cnt가 2 이상이면 숫자까지 붙여주면 된다.
  • substring의 인덱스만 조심해주면 쉽게 풀 수 있는 문제!

 

 

코드

import java.util.*;

class Solution {
    public int solution(String s) {
        int len = s.length();
        int answer = len;

        for (int i = 1; i <= len / 2; i++) {
            StringBuilder sb = new StringBuilder();
            String prev = s.substring(0, i);
            int cnt = 1;
            int idx = 0;
            for (int j = i; j < len; j+= i) {
                if (j + i > len) {
                    idx = j;
                    break;
                }
                String next = s.substring(j, j + i);
//                System.out.println("prev, next = " + prev + ", " + next);
                if (prev.equals(next)) cnt++;
                else {
                    if (cnt > 1) sb.append(cnt);
                    sb.append(prev);
                    cnt = 1;
                }
                prev = next;
            }
            if (cnt > 1) sb.append(cnt);
            sb.append(prev);
            if (idx > 0) sb.append(s.substring(idx));

//            System.out.println(sb.toString() + ", " + sb.toString().length());
            answer = Math.min(answer, sb.toString().length());
        }

        return answer;
    }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함