반응형
문제
나의 풀이
function solution(msg) {
var answer = [];
let obj = {};
let arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
arr = arr.split("");
for(let i = 0 ; i < arr.length;i++){
obj[arr[i]] = i+1
}
let max = 1;
for(let i = 0 ; i < msg.length;){
let w = msg[i];
for(let j = 0 ; j < max;j++){
const tmpw = msg.substring(i,i+max-j)
if(obj[tmpw]){
w = tmpw
break;
}
}
let c = msg[i+w.length];
if (!c) c= ""
if (!w) break;
if(obj[w]){
const sum = w+c;
answer.push(obj[w]);
arr.push(sum);
obj[sum] = arr.length;
max = max > sum.length ? max : sum.length
i = i+w.length;
}
}
return answer;
}
- 초기 A-Z까지 배열과 obj를 선언해준다.
- for문으로 msg를 읽으면서, 속에 다시 for문을 돌려 조건에 맞는 w와c를 넣어준다.
- 정답은 answer배열에 push해준다.
다른이의 풀이 보며 보완
1.
for(let i = 0 ; i < arr.length;i++){
obj[arr[i]] = i+1
}
이 부분을
var dic = list.reduce((d, a, i) => (d[a] = i + 1, d), {})
이렇게 선언해 줄 수 있었다.
2.
for(let j = 0 ; j < max;j++){
const tmpw = msg.substring(i,i+max-j)
if(obj[tmpw]){
w = tmpw
break;
}
}
나는 끝부분 부터 확인하도록 구성하였는데,
while (dic[w+c] && i < msg.length - 1) {
i++;
w = w+c;
c = msg[i+1];
}
이렇게 while문을 사용하고, 기존의 i를 이용해서 앞에서부터 확인하면 i를 따로 작업해주지 않아도 되고,substring도 안써도 되며, max변수값을 안써도 되므로 더 괜찮은 것 같다. 대신 기존 for문에 i++를 추가해줘야된다.
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] level1. 위클리 챌린지 2주차 (javascript) (0) | 2021.09.02 |
---|---|
[프로그래머스] level2. 큰 수 만들기 (javascript) (0) | 2021.09.01 |
[프로그래머스] level2. 구명보트 (javascript) (0) | 2021.08.26 |
[프로그래머스] level2. [3차] 파일명 정렬 (javascript) (0) | 2021.08.18 |
[프로그래머스] level1. 숫자 문자열과 영단어 (javascript) (0) | 2021.07.13 |