[프로그래머스] 압축

정호·2023년 10월 18일
0

문제 풀이

목록 보기
55/60

문제 링크

1️⃣ 문제 설명


2️⃣ 제한 사항

입력으로 영문 대문자로만 이뤄진 문자열 msg가 주어진다. msg의 길이는 1 글자 이상, 1000 글자 이하이다.

3️⃣ 입출력 예

주어진 문자열을 압축한 후의 사전 색인 번호를 배열로 출력하라.

4️⃣ 나의 풀이

function solution(msg) {
    const answer = [];
    let nextWord = "";
    let lastCount = 27;
    const dir = {
                 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
                };
   const s = msg.split("").reduce((acc, cur) => {
       nextWord = acc + cur;
       if (dir[nextWord] === undefined) {
           dir[nextWord] = lastCount++;
       } else {
           return acc + cur;
       }
       if (dir[acc] !== undefined) answer.push(dir[acc]);
       return cur;
   });
   
   answer.push(dir[s]);
    
   return answer;
}
`msg.split("").reduce(...)`: 문자열을 순회

msg를 압축

  • answer: 최종적으로 반환할 압축된 숫자들을 저장하는 배열
  • nextWord: 현재까지 읽은 메시지에서 다음에 읽을 문자열을 저장하는 변수
  • dir: 알파벳에 대응하는 숫자를 저장하는 객체 A부터 Z까지의 알파벳을 키로 가지고 있고 각 알파벳에 해당하는 숫자가짐
  • msg.split("").reduce(...): 문자열을 순회
    1.nextWord에 현재까지 읽은 문자열을 더하고, 만약 해당 단어가 dir에 없다면 새로운 단어로 인식하고 dir에 추가
  1. 이미 존재하는 단어라면 현재까지 읽은 부분을 반환
  2. dir[acc] !== undefined 일 때, 이미 존재하는 단어인 경우 해당 단어에 대응하는 숫자를 answer 배열에 추가
    현재 문자를 반환하여 다음 반복에 사용
  • 반복이 끝나면 마지막으로 남은 s에 해당하는 숫자를 dir에서 찾아서 answer에 추가
profile
열심히 기록할 예정🙃

0개의 댓글