Muscardinus

[3차] 압축 본문

알고리즘 문제/[프로그래머스] Lv2

[3차] 압축

Muscardinus 2021. 2. 7. 16:38
728x90

programmers.co.kr/learn/courses/30/lessons/17684?language=javascript

 

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

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

programmers.co.kr

const key = {
  A: 1,
  B: 2,
  C: 3,
  D: 4,
  E: 5,
  F: 6,
  G: 7,
  H: 8,
  I: 9,
  J: 10,
  K: 11,
  L: 12,
  M: 13,
  N: 14,
  O: 15,
  P: 16,
  Q: 17,
  R: 18,
  S: 19,
  T: 20,
  U: 21,
  V: 22,
  W: 23,
  X: 24,
  Y: 25,
  Z: 26,
};

let idx = 27;
function solution(msg) {
  let answer = [];
  for (let i = 0; i < msg.length; i) {
    let w = msg[i];
    let c = msg[i + 1];
    let newW = add(msg, i, w, c, 0);
    answer.push(key[newW]);
    i += newW.length;
  }
  return answer;
}

function add(msg, i, w, c, cnt) {
  if (key[w+c] === undefined) {
    key[w+c] = idx++;
    return w;
  } else {
    cnt++;
    let newW = w + c;
    let newC = msg[i + 1 + cnt];
    return add(msg, i, newW, newC, cnt);
  }
}

 

좋은 풀이

function solution(msg) {
    let list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
    let dic = list.reduce((d, a, i) => (d[a] = i + 1, d), {})

    let result = [];
    // var maxLen = 1;
    for (let i = 0; i < msg.length; i++) {
      let w = msg[i];
      let c = msg[i + 1];
      while (dic[w + c] && msg.length - i) {
        i++;
        w = w + c;
        c = msg[i + 1];
      }
      result.push(dic[w]);
      list.push(dic[w + c]);
      dic[w + c] = list.length;
    }

    return result;
}
728x90

'알고리즘 문제 > [프로그래머스] Lv2' 카테고리의 다른 글

행렬 테두리 회전하기  (0) 2022.01.23
[3차] 방금그곡  (0) 2021.02.10
이진 변환 반복하기  (0) 2021.02.06
쿼드압축 후 개수 세기  (0) 2021.02.03
메뉴 리뉴얼  (0) 2021.02.03
Comments