Muscardinus
[3차] 압축 본문
728x90
programmers.co.kr/learn/courses/30/lessons/17684?language=javascript
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