프로그래머스 Level 2 - 압축
📌 문제 설명
![](https://velog.velcdn.com/images%2Ftnehd1998%2Fpost%2Ff2ce9320-22fe-41fe-9c8e-fe12cbf60e8a%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-03-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.02.51.png)
![](https://velog.velcdn.com/images%2Ftnehd1998%2Fpost%2Fde79b109-afdb-43a8-a5b8-708323b2bc4c%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-03-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.03.19.png)
![](https://velog.velcdn.com/images%2Ftnehd1998%2Fpost%2Febac04bc-c875-44a7-9dae-67015451f1b5%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-03-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.03.55.png)
![](https://velog.velcdn.com/images%2Ftnehd1998%2Fpost%2F7533cd22-2a9e-4b3a-b1d8-3dde478bd737%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-03-04%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.04.56.png)
📌 생각한 풀이 방법
- A~Z까지 arr에 저장한다.
- letterObj 객체에 key로 A, value: 1 형태로 저장한다.
- msg를 배열인 message로 변환한다
- 현재 단어인 current와 다음 단어인 next를 합친 current+next가 letterObj에 존재하면, 다음 단어와 합쳐 해당 값이 존재할 때까지 반복한다.
- current+next가 존재하지 않을 때, 해당 단어를 answer에 push한다.
- current+next를 letterObj 마지막에 추가한다.
- message가 존재할 때까지, 4~6을 반복한다.
📌 풀이
function solution(msg) {
let answer = [];
let arr = Array.from({ length: 26 }, (_, index) =>
String.fromCharCode(index + 65)
);
let letterObj = {};
arr.map((current, index) => (letterObj[current] = index + 1));
let message = msg.split("");
while (message.length) {
let current = message.shift();
let next = message[0];
while (letterObj[current + next]) {
message.shift();
current = current + next;
next = message[0];
}
answer.push(letterObj[current]);
letterObj[current + next] = Object.keys(letterObj).length + 1;
}
return answer;
}