복수의 단어가 들어가있는 배열에서 그 각각의
element
에 중복되는 단어를 반환하는 문제다. 첫번째index
의 단어를 기준으로 두번째와 세번째 단어에indexOf
메소드를 적용하면 접근이 용이할 것 같아 그런 식으로 접근을 해보았으며, 이후 첫 단어를 slice해주는 식으로 풀이를 해보았다.
const getPrefix = strs => {
if (strs.length === 0) { // strs이 빈 배열일 경우
return '';
}
let prefix = strs[0]; //기준이 되는 첫번째 원소
for (let i=1; i<strs.length; i++){
while(strs[i].indexOf(prefix)!==0){ // 두번째 원소부터 그 원소가 prefix를 포함하지 않을 동안
prefix=prefix.slice(0,prefix.length-1) // prefix를 끝에서 한글자씩 지워줌
}
}
return prefix;
}
느낀 점
접근이 중요하다고 느꼈다.
indexOf
의 값이 0이라면 해당 단어가 현재 단어 안에 모두 포함되었다는걸 의미하고,indexOf
의 값이 -1이라면 해당 단어가 현재 단어 안에 포함되지 않은걸 의미하기에,indexOf
값이 0,-1 의 경우에 따라 조건을 나눠주었고, 그럴 경우 다음 단어로 넘어가 해당 prefix를 다시 비교해보며 최종 문자열을 반환할 수 있었다.indexOf
와slice
(substring
으로 대체 가능) 의 기능성과 장점을 확실히 느낄수 있는 문제였다.