jiho_bae
Go devlog
jiho_bae
전체 방문자
오늘
어제
  • 분류 전체보기 (158)
    • JavaScript (38)
      • theory (34)
      • vanilla (4)
    • HTML & CSS (2)
    • Browser (3)
    • CS (6)
      • linux (1)
      • shell (2)
      • compiler (2)
    • DS & Algorithm (87)
      • theory (5)
      • basic (7)
      • programmers (30)
      • baekjoon (45)
    • Design Pattern (2)
    • Error (4)
    • Git & Github (4)
    • Tools (1)
    • 부트캠프 (4)
    • Small Tips (2)
    • Java (3)
    • test (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트 채팅방 스크롤
  • 자바스크립트 비동기 마이크로 태스크 큐와 렌더링 과정
  • safari Date format NaN
  • 대충만든자판 javascript
  • 억억단을 외우자 javascript
  • 자바스크립트 sort는 왜 그모양일까
  • 카카오 코딩테스트 양궁대회 nodeJS
  • 자바스크립트 이벤트 위임
  • 25632 소수 부르기 게임
  • 리액트 프로젝트 디버깅하기
  • safari invalid date error
  • 백준 17406 nodeJS
  • 13460 javascript nodejs
  • 백준 자바스크립트 입력 템플릿
  • 자바스크립트 배열의 특수함
  • 자바스크립트 커링
  • 리코쳇 로봇 javascript
  • 덧칠하기 javascript
  • 1753 최단경로 javascript
  • 자바스크립트 모듈 시스템
  • fetch 취소하기
  • JavaScript
  • 깃 이전 커밋에서 새 브랜치 만들기
  • 병합정렬 자바스크립트
  • 퀵정렬 자바스크립트
  • javascript use strict
  • 계수정렬 자바스크립트
  • 가사 검색 자바스크립트
  • 외벽 점검 javascript
  • 프로그래머스 숫자카드나누기 javascript

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
jiho_bae
DS & Algorithm/programmers

[프로그래머스] 압축 - 자바스크립트

DS & Algorithm/programmers

[프로그래머스] 압축 - 자바스크립트

2021. 6. 27. 03:10

문제

 

코딩테스트 연습 - [3차] 압축

TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]

programmers.co.kr

 

코드

function solution(msg) {
  const answer = [];
  const dict = [0];
  for (let i = 0; i < 26; i++) {
    dict.push(String.fromCharCode(i + 65));
  }

  let idx = 0;
  let w = msg[idx];
  while (true) {
    let c = msg[++idx];
    if (c === undefined) {
      answer.push(dict.indexOf(w));
      return answer;
    }
    if (dict.includes(w) && !dict.includes(w + c)) {
      answer.push(dict.indexOf(w));
      dict.push(w + c);
      w = c;
    } else {
      w += c;
    }
  }
}


 

풀이

 

LZW 압축 과정

 

1. 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다.
2. 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다.
3. w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다.
4. 입력에서 처리되지 않은 다음 글자가 남아있다면(c), w+c에 해당하는 단어를 사전에 등록한다.
5. 단계 2로 돌아간다.

 

변수 w,c는 각각 문제에 주어진 검증 문자열 w, 다음 문자 c를 의미한다.

     

사전에 w가 존재하고 w+c가 존재하지 않을 때

      사전에서 w의 인덱스를 정답 배열에 기록하고, 사전에 w+c를 추가하고, w를 c로 변경한다.

사전에 w가 존재하고 w+c도 존재한다면 w를 w+c로 변경한다.

 

두 절차 모두 다음 문자열 c를 요구하므로, while문의 첫 라인에서 변수 c를 받는다.

 

c가 존재하지 않는다면 더이상 진행할 수 없으므로 현재 w를 출력하고 무한루프를 종료한다.

무한루프를 종료하면서 w의 사전 인덱스를 담은 배열을 출력한다.

저작자표시 (새창열림)

'DS & Algorithm > programmers' 카테고리의 다른 글

[프로그래머스] 쿼드 압축 후 개수 세기 - 자바스크립트  (0) 2021.06.28
[프로그래머스] 괄호 회전하기 - 자바스크립트  (0) 2021.06.27
[프로그래머스] 영어 끝말잇기 - 자바스크립트  (0) 2021.06.27
[프로그래머스] 파일명 정렬 - 자바스크립트  (0) 2021.06.24
[프로그래머스] 피보나치 수 - 자바스크립트  (0) 2021.06.19
  • 문제
  •  
  • 코드
  •  
  • 풀이
'DS & Algorithm/programmers' 카테고리의 다른 글
  • [프로그래머스] 쿼드 압축 후 개수 세기 - 자바스크립트
  • [프로그래머스] 괄호 회전하기 - 자바스크립트
  • [프로그래머스] 영어 끝말잇기 - 자바스크립트
  • [프로그래머스] 파일명 정렬 - 자바스크립트
jiho_bae
jiho_bae
하루에 한 걸음씩

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.