반응형
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/17684
2. 코드
다른 좋은 방법들도 많겠지만, 나는 dic이라는 사전 객체를 먼저 만들어주고 시작했다.
현재 단어(w) + 다음 단어(c)가 사전에 없으면 현재 단어의 색인 번호를 answer에 push하고 현재 단어(w)+ 다음 단어(c)를 사전에 넣는다. 이때 색인 번호는 사전에 있는 마지막 단어의 색인 번호 +1이다.
만약 현재 단어(w) + 다음 단어(c)가 사전에 있다면 사전에 없을 때까지 다음 단어들을 더해준다. 계속 더해주다가 마침내 사전에 없는 단어가 완성되었을 때, 앞의 방법과 마찬가지로 단어를 넣는다.
while 문의 탈출조건이 msg의 길이가 0일 경우이므로 위의 두 가지 경우 모두 사전에 단어를 넣은 후, 넣은 단어는 splice를 통해 msg에서 제거하고 마지막 단어의 색인 번호를 저장하는 last에 +1을 해준다.
두 가지 경우에 해당하는 로직을 실행하였으면 다음 단어 처리를 위해 w 값을 msg의 첫번째 단어로 재할당한다.
function solution(msg) {
let answer = [];
msg = msg.split('');
const dic = {"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 w = msg[0];
let last = 26;
while(msg.length){
if(!((w + msg[1]) in dic)){
answer.push(dic[w]);
msg.splice(0,1);
dic[w + msg[0]] = last + 1;
last ++;
}else{
for(let i=1;i<msg.length;i++){
if((w + msg[i]) in dic) w += msg[i];
else break;
}
answer.push(dic[w]);
msg.splice(0,w.length);
dic[w + msg[0]] = last + 1;
last ++;
}
w = msg[0];
}
return answer;
}
반응형
'프로그래머스 > 구현' 카테고리의 다른 글
[문자열 & 해시] 프로그래머스 '주차 요금 계산' - js (0) | 2023.04.08 |
---|---|
[문자열] 프로그래머스 'n진수 게임' - js (0) | 2023.04.07 |
[구현] 프로그래머스 '야근 지수' - js (0) | 2023.04.06 |
[문자열&소수] 프로그래머스 'k진수에서 소수 개수구하기' - js (0) | 2023.04.05 |
[수학] 프로그래머스 '최고의 집합' - js (0) | 2023.04.04 |