const getPrefix = strs => {
if(strs.length == 0){
return ""
}else{
let b = [];
for(let i = 0; i < strs[0].length; i++){
for(let j = 0; j < strs.length; j++){
strs[i][j] == strs[i][j]
}
}
}
우선 배열안의 요소들의 알파벳에 하나씩 접근하기 위해서 이중 for문을 작성한다.
첫 번째 if문에서는 만약 빈 배열이 인자로 들어온다면 빈 문자열을 반환한다.
반복문에서 첫 번째 요소의 길이만큼(0번째 인덱스) i가 증가하는 동안 j는 배열의 길이만큼 순환하는 것을 작성했다.
하지만 아무리 생각해도 두 번째 반복문의 j가 어디까지 증가해야 하는지 기준을 잡지 못하겠다.
모든 요소의 문자열 길이는 다른데 이 기준을 무엇으로 지정해야 할까....
const getPrefix = strs => {
if (!strs.length) return '';
for (let i = 0; i <= strs[0].length; i++) {
for (let j = 1; j < strs.length; j++) {
if (strs[0][i] !== strs[j][i]) {
return strs[0].slice(0, i);
}
}
}
return strs[0];
}
strs = ['start', 'stair', 'step']
먼저 위의 고민 사항을 해결하기 위해 for문을 똑같이 작성했지만 j는 1부터 시작한다.
그리고 strs의 요소의 인덱스 번호를 j에 부여했다.
이래야 0 번째 인덱스인 ['start']
의 "s"와 첫 번째 인덱스인[stair]
의 "s"를 비교할 수 있다.
그 후, j는 strs의 길이만큼 순환하니 'step'의 "s"와의 비교도 끝이난다.
i는 1이 되고 각각 요소의 "t"를 비교한다.
i는 2가 되고 각 요소들의 "a"를 비교하는데 이때 j가 2일 때, for문 안의 if문의 조건에서 true를 반환하기 때문에 return strs[0].slice(0,i)
를 실행한다.
반환되는 값은 0 번째 인덱스인 "s"이며 slice를 통해 i=2이고 2번째 인덱스 바로 앞 값까지 복사하여 반환한다.
결과적으로 반환되는 값은 "st"