프로그래머스 / Level 2 , 2018 KAKAO BLIND RECRUITMENT , [3차] 압축 자바스크립트 , JS
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
어제 자기전 새벽에 푼 문제인데 생각한 로직인 딱 맞아서 풀려서 기분 좋았던 문제였다.
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/17684
풀이
우선 TypeNum 이라는 사전을 만들건데, A-Z까지 각각 1-26 번까지의 번호를 할당하여 넣어줄 것이다.
하드코딩할 필요없이 아스키코드를 이용하여 넣어주자.
*참고로 A=65번 ~ Z는 90번이다.
value값은 1번부터 차례로 부여해야하므로 각값에서 64를 빼주고 넣어준다.
이후 주어진, msg 단어를 하나씩 확인해가면서 사전에 단어가 있는지 없는지를 확인해준다.
한자리 단어는 사전에 이미 다들어가 있고 새로만나게될 두자리 이상의 단어들은 다 사전에 넣어준다.
이때, 앞에서 나왔던 두자리 이상 단어가 사전에 이미 들어가 있고 또 만나게 될경우 부여한 value값을 결과 값에 넣어주고 더이상 단어를 더 생성하지 않게 하는 것이 이 문제의 핵심이다.
이 구분은 if(Type[Num]) 으로 확인해주면서 사전에 단어가 있는지 없는지를 확인해주자.
조금 제대로 체크해줘야하는 부분은 단어를 이어 붙여서 만들었을때 그 단어가 사전에 없다면 사전에 넣어주고
다음에 확인해야될것은 방금 이어 붙인 단어 부터 시작해야된다는 점이다.
ex) AB 까지는 사전에 있고 ABC가 사전에 없다면
ABC를 사전에 넣어주고 이제 체크해줘야할단어는 C라는 단어이다.
C라는 단어부터 다시 CD, CDE... 이렇게 다시 오른쪽으로 붙여가면서 확인해주고
이전의 AB 단어들은 더이상 확인해줄 것이 없다.
그리고 이 변수들을 잘 활용하자.
cnt는 msg 단어의 인덱스를 차례대로 확인해주고 msg단어의 길이만큼 커지게되면 while문을 종료시키게 한다.
plus는 Z까지 26을 부여했고 새로 생성되는 단어부터는 27을 시작으로 넣어주면 된다.
따라서 사전에 단어를 넣게된다면 넣고나서 반드시 plus를 증가시켜주자.
result는 결과값들을 저장하고 최종적으로 return 할 값이다.
정답
function solution(msg) {
const TypeNum = {};
for (let i = 65; i <= 90; i++) TypeNum[String.fromCharCode(i)] = i - 64;
let [cnt, plus, result] = [0, 27, []];
while (cnt < msg.length) {
let tmp = msg[cnt];
let newWord = tmp;
while (TypeNum[tmp]) {
newWord = tmp + msg[cnt + 1];
// 사전에 단어가 있을 때
if (TypeNum[newWord]) [tmp, cnt] = [newWord, cnt + 1];
// 사전에 단어가 없을 때
else {
TypeNum[newWord] = plus;
plus += 1;
cnt += 1;
result.push(TypeNum[tmp]);
break;
}
}
}
return result;
}
'알고리즘 공부 > 프로그래머스 - 자바스크립트' 카테고리의 다른 글
프로그래머스 / Level 1 , 연습문제 , 명예의 전당 (1) 자바스크립트 , JS (0) | 2022.12.07 |
---|---|
프로그래머스 / Level 2 , 깊이/너비 우선 탐색(DFS/BFS) , 타겟 넘버 자바스크립트 , JS (1) | 2022.09.29 |
프로그래머스 / Level 2 , 2019 KAKAO BLIND RECRUITMENT , 오픈채팅방 자바스크립트 , JS (0) | 2022.09.28 |
프로그래머스 / Level 2 , 스택/큐 , 프린터 자바스크립트 , JS (0) | 2022.09.26 |
프로그래머스 / Level 2 , 2019 카카오 개발자 겨울 인턴십 , 튜플 자바스크립트 , JS (0) | 2022.09.26 |