strs은 단어가 담긴 배열입니다.
공통된 시작 단어(prefix)를 반환해주세요.
예를 들어
strs = ['start', 'stair', 'step']
return은 'st'
strs = ['start', 'wework', 'today']
return은 ''
문제는 참 간단해 보이는데 너무 어려웠다.....
이번에도 역시 구글링으로...
function getPrefix(strs) {
if(!strs.length) {
return "";
}
let sorted = strs.sort();
let string1 = sorted[0];
let string2 = sorted[sorted.length-1];
let i = 0;
let l = Math.min(string1.length, string2.length);
while(i < l && string1[i] === string2[i]) {
i++;
}
return string1.slice(0, i);
}
console.log(getPrefix(['step', 'start', 'stair'])); // 'st'
console.log(getPrefix(['start', 'stair', 'apple'])); // ''
console.log(getPrefix([])); // ''
천천히 이해 중심으로 글을 작성해 보겠다.
함수 안에서
만약 strs가 빈 배열이라면 ""을 출력한다.
sorted라는 변수에 strs 배열을 sort() 메서드를 사용하여 정렬한 뒤 저장한다.
string1 이라는 변수에 sorted 배열의 첫 번 째 요소를 담아 저장한다.
string2 라는 변수에 sorted 배열의 마지막 요소를 담아 저장한다.
이렇게 두 개의 변수만 저장하는 이유는 위에서 sort() 메서드를 사용하여 정렬해주었기 때문이다.
ex) strs가 [ 'stair', 'start', 'step' ]로 정렬되었다면 배열의 가운데 요소는 비교에서 생략해도 되므로 첫번째 요소와 마지막 요소만 따오는 것이다.
i = 0 이라는 변수를 설정한다.
l이라는 변수를 선언하고 그 값은 string1과 string2를 비교하여 문자의 길이가 더 짧은 것의 숫자로 저장한다.
while 문의 조건 = i < l && string1[i] === string2[i] 이 참일 때까지 i 값을 1씩 더해나간다.
반복문이 끝나면 string1 문자열에서 slice() 메서드를 사용하여 0번 째 문자부터 i번 째 문자까지 출력한다.
Ref.