개발후라이
개발후라이
개발후라이
  • 분류 전체보기 (286) N
    • Web Front End (75) N
      • Javascript & Typescript (26)
      • React (12) N
      • Vue (4)
      • Nodejs (1)
      • HTML (6)
      • CSS (7)
      • HTTP (6)
      • 책 - Review (8)
    • TIL (0)
    • Problem Solved (135)
      • 알고리즘 (4)
      • BOJ (67)
      • Programmers (8)
      • HackerRank (33)
      • LeetCode (23)
    • 회고 (4)
      • 오늘의 회고 (16)
      • 주간 회고 (15)
      • 월간 회고 (7)
      • WakaTime (9)
    • Git (3)
    • 기타 (15)
      • 취업 (5)
      • 자격증 (1)

블로그 메뉴

  • GitHub
  • LinkedIn
  • 홈

인기 글

태그

  • 자바스크립트
  • 개발자
  • 프론트엔드
  • TypeScript
  • 노마드북클럽
  • 릿코드
  • 노개북
  • 회고
  • JavaScript
  • 오늘의회고

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
개발후라이

개발후라이

Problem Solved/Programmers

[프로그래머스][Javascript] 문자열 압축

2020. 1. 9. 11:19
반응형

문제

[프로그래머스][Javascript] 문자열 압축

문제 설명

가장 압축이 작게 된 길이 찾기

처음에 너무 복잡하게 나누고 배열에 계속 저장하는 식으로 하다가 계속 값이 제대로 배열에 저장이 안되는 문제가 생겨 테스트케이스를 모두 다 통과하지 못하는 문제가 생겼다.
블로그를 참고해 조금 간단하게 수정했더니 바로 작동하는 코드가 되었다.
참고 블로그 : [javascript] 프로그래머스/문자열 압축 문제..

문자열을 n의 길이씩 자르는 것도 배열에 저장하는 makeSplit이라는 함수가 있었는데, 배열로 저장하는 과정을 삭제하는 대신 currWord와 nextWord에 자른 값을 그때그때 저장하며 바로 비교할 수 있도록 바꿨다.
그리고 처음에는 count를 저장하는 배열과 중복되지 않은 문자열을 따로 저장해 마지막에 길이를 재서 합치게끔 했는데, 그렇게 하지 않고 바로 압축문자가 result에 저장되게 했더니 오히려 더 간단한 식이 되었다.

성공 코드와 실패 코드 비교해서 보기

깃허브 커밋 내역 - [Programmers] [완성] 문자열 압축

성공 코드

const solution = s => {
    let min = 1000;

    for (let i = 1; i <= s.length / 2 + 1; i++) {
        min = (countZip(s, i) < min) ? countZip(s, i) : min;
    }

    return min;
}

const countZip = (s, position) => {
    let answer = 1;
    let start = 0;
    let end = position;
    let count = 1;
    let result = "";

    while (answer <= s.length) {
        let currWord = s.slice(start, end);
        let nextWord = s.slice(start + position, end + position);

        answer += position;
        start += position;
        end += position;

        if (currWord === nextWord) {
            count++;
        }
        else {
            if (count === 1) {
                result += currWord;
            }
            else {
                result += count + currWord;
            }
            count = 1;
        }
    }

    return result.length;
}
반응형
저작자표시 (새창열림)
    'Problem Solved/Programmers' 카테고리의 다른 글
    • [Programmers][Javascript] 가장 큰 수
    • [Programmers][Javascript] K번째수
    • [프로그래머스][Javascript] 완주하지 못한 선수
    • [프로그래머스] 데모 테스트 - 직사각형 별찍기
    개발후라이
    개발후라이
    어제보다 오늘 발전하기 위한 공간 https://github.com/choisohyun

    티스토리툴바