문제
* strs은 단어가 담긴 배열입니다. 공통된 시작 단어(prefix)를 반환해주세요.
ex) strs = ['start', 'stair', 'step'], return은 'st'
문제 해결 방법 구상
1) 각 배열 값들을 비교 하고, 자릿수도 비교해야 하므로 이중 for 문을 써야겠다고 판단했습니다.
2) 각 값의 비교의 의 종료 조건은 인자 의 배열길이로, 각 자리수의 비교의 종료 조건은 배열의 값중 최소길이 값을 기준으로 했습니다. (예시 처럼 5글자,5글자,4글자 인경우 5번째 문자의 비교는 의미가 없기 때문에)
코드 작성
const getPrefix = (strs) => {
let result = [];
let minlen = 0;
for (let j = 1; j < strs.length; j++) { // 인자내 배열 내의 값 중 최소길이를 구하는 for 문
minlen = strs[0].length;
if (minlen > strs[j].length) {
minlen = strs[j].length;
}
}
if (strs.length === 0) { // 인자가 빈 배열일시 return "" 하고 함수 종료
return "";
} else {
for (let t = 0; t < minlen; t++) { // 문자 비교는 가장 짧은 문자 길이 만큼만 하는 for 문 작성
for (let i = 0; i < strs.length - 1; i++) { // 각 배열값의 문자 비교를 위한 for 문
if (!(strs[i][t] === strs[i + 1][t])) {
break; // 문자가 다를시 바로 반복문 종료, 다음자리 글자로 넘어감
} else if (strs[i][t] === strs[i + 1][t] && i === strs.length - 2) { // 모든 값을 비교하고 마지막 이전 값과 마지막 값의 비교까지 진행됐을때 현재 그 문자를 result 배열에 할당 하는 if 문.
result.push(strs[i][t]);
}
}
}
}
return result.join(""); // 배열에 들어온 값을 하나의 문자열로 합쳐서 return
};
작성 후 알게 된 점
1) 새로운 함수를 만들 때, 필요에 의해서 함수내부나 반복문 안에서 변수를 선언 할 때가 있는데, 이때 되도록이면 변수는 변수가 작동할 scope 안에서 선언하고 사용하는 것이 좋고, 그 변수가 scope 밖에서 필요하다고 할 시 다른 부분에 영향을 주지 않고 잘 호출 하도록 신경을 써야 할 것 같습니다.