프로그래머스 LEVEL 2(문자열 압축)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-10-31

  • 해결 방법 :
    • 문자열의 길이가 1000 이하이므로 N^2까지 사용 가능
    • 문자열을 자를 단위를 1부터 문자열 길이의 반까지 증가시키며 반복
      • 반까지 하는 이유는 반 이후로는 의미가 없기 때문
      • 문자열 자를 단위만큼 증가시키며 내부 반복문을 돌리며 현재 자른 문자열과 이전에 자른 문자열과 같다면 count 증가
      • 이전에 자른 문자열과 다르다면 count + 이전에 자른 문자열을 str에 추가
      • 내부 반복문이 끝난 후 마지막 temp값을 추가하고 answer의 길이와 비교하여 작다면 answer update
  • 회고 :
    • 문자열 자를 최대 단위 half를 parseInt()로 소숫점을 버렸는데, 이 경우 문자열의 길이가 1일 때 통과하지 못하므로 올림 처리했음
  • 코드

    function solution(s) {
        let answer = 1001;
        const length = s.length;
        const half = Math.ceil(length / 2);
            
        for (let trim_index = 1; trim_index <= half; trim_index++) {
            let str = '';
            let temp = s.substring(0, trim_index);
            let count = 1;
            for (let i = trim_index; i <= length; i += trim_index) {
                const cur = s.substring(i, i + trim_index);
                if (temp === cur) count++;
                else {
                    if (count > 1) str += count + temp;
                    else str += temp;
                    temp = cur;
                    count = 1;
                }
            }
            if (answer > (str + temp).length) answer = (str + temp).length;
        }
            
        return answer;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges