strs은 단어가 담긴 배열입니다. 공통된 시작 단어(prefix)를 반환해주세요.
예를 들어 strs = ['start', 'stair', 'step'] return은 'st'
strs = ['start', 'wework', 'today'] return은 ''
const getPrefix = (strs) => {
// 1. strs의 요소가 없다면 ""바로 리턴.
if (strs.length === 0) {
return '';
}
// 2.strs배열 중 젤 첫번째 요소 기준으로 다른 요소와 비교한다.
const word = strs[0];
const unitArr = [];
// 3. word의 각 인덱스에 해당하는 문자와, 다른 요소의 해당 인덱스의 문자가 같은지 비교한다.
for (let i = 0; i < word.length; i += 1) {
const unit = word[i]; // s t a r t
let tf = [];
// 4. word의 문자와 같으면 true, 아니면 false를 반환하여 tf배열에 담는다.
for (let j = 1; j < strs.length; j += 1) {
// console.log(strs[j][i]); // s s t t a e i p r
if (strs[j][i] === unit) {
tf.push(true);
} else {
tf.push(false);
}
}
// 5. 만약 tf에 false가 없으면 해당 unit을 unitArr에 담는다
if (!tf.includes(false)) {
unitArr.push(unit);
} else {
break;
}
}
// 6. unitArr에 있는 요소가 없다면 ""을 리턴.
if (unitArr.length === 0) {
return '';
}
// 6. unitArr에 있는 모든 요소를 더하여 리턴한다.
return unitArr.join("");
};
// 실행코드
console.log(getPrefix(['start', 'stair', 'step'])); // 'st'
console.log(getPrefix(['start', 'wework', 'today'])); // ""
console.log(getPrefix(['abcff', 'drgff', 'uikff'])); // ""
console.log(getPrefix(['start', 'afair', 'step'])); // ''
console.log(getPrefix([])); // ''
function getPrefix(strs) {
// 1. strs의 길이가 0이라면 ""리턴
if (strs.length < 1) {
return '';
}
const match = []; // [s,t]
// 2. strs의 첫 요소를 기준으로, 각 문자를 순회함.
for (let i = 0; i < strs[0].length; i += 1) {
// 3. 각 요소의 같은 인덱스를 순회하면서, 객체에 담는다.
// 이때 객체의 키 값은 유니크하기 때문에 같은 문자라면 결국 키는 하나만 생성될 것임.
const obj = strs.reduce((obj, word) => ({ ...obj, [word[i]]: 1 }), {});
// console.log(obj); // {s:1} {t:1} {a: 1, e: 1}
// 4. {a: 1, e: 1} 이면 모든 문자가 같지 않다는 것임.
// 따라서 match에 푸쉬하지 않고 for문을 끝내버림.
if (Object.keys(obj).length > 1) {
break;
}
// 5. {s:1} {t:1} 이면 모든 문자가 같다는 것임.
// 따라서 키값을 match 배열에 넣음
match.push(Object.keys(obj)[0]);
}
// 6. match에 쌓인 모든 요소를 합하여 반환함.
return match.join('');
}
const getPrefix = (strs) => {
let prefix = strs[0];
if (strs.length === 0) {
prefix = '';
}
for (let i = 1; i < strs.length; i += 1) {
while (strs[i].indexOf(prefix) !== 0) {
prefix = prefix.substring(0, prefix.length - 1);
// console.log('prefix:' + prefix); // star sta st
}
}
return prefix;
};