난이도: Lv. 2
문제: https://school.programmers.co.kr/learn/courses/30/lessons/17684
알고리즘
1. 사전에 존재하지 않는 단어가 나올때까지 문자를 계속 추가한다.
2. 사전에 존재하지 않는 단어가 나오면 마지막 문자를 제외한 문자열의 사전 색인 번호를 정답 배열에 추가하고, 사전에도 추가한다.
3-1. 주어진 문자열의 마지막 문자를 포함한 문자열이 사전에 존재하는 경우의 예외 처리 (j === msg.length - 1 부분)
3-2. 주어진 문자열의 마지막 문자만 남은 경우의 예외 처리 (i === msg.length - 1 부분)
코드
function solution(msg) {
var answer = [];
let index = 27;
const dictionary = {};
for (let i = 1; i <= 26; i++)
dictionary[String.fromCharCode(64 + i)] = i;
for (let i = 0; i < msg.length;) {
for (let j = i + 1; j < msg.length; j++) {
const substr = msg.substring(i, j + 1);
if (Object.hasOwn(dictionary, substr)) {
if (j === msg.length - 1) {
answer.push(dictionary[substr]);
i = msg.length;
break;
}
}
else {
answer.push(dictionary[msg.substring(i, j)]);
dictionary[substr] = index++;
i = j;
break;
}
}
if (i === msg.length - 1) { answer.push(dictionary[msg[i]]); break; }
}
return answer;
}
주저리
고난이 너무 많았어서 할 말도 다 까먹었다. 처음부터 그냥 while문 썼으면 나았을 것 같은데 굳이굳이 for문 쓰다가 문제를 한참 풀었다. 마지막 고난만 기억 나는데 주어진 문자열의 길이가 1인 경우 undefined가 나와서 코드를 조금 바꿨다.
'코딩테스트' 카테고리의 다른 글
[JS] 모음사전 (0) | 2023.12.28 |
---|---|
[JS] [3차] n진수 게임 (0) | 2023.12.27 |
[JS] k진수에서 소수 개수 구하기 (1) | 2023.12.24 |
[JS] 타겟 넘버 (1) | 2023.12.22 |
[JS] 전화번호 목록 (1) | 2023.12.21 |