Code Kata( 5 )
문제
문제
strs은 단어가 담긴 배열입니다.
공통된 시작 단어(prefix)를 반환해주세요.
예를 들어
strs = ['start', 'stair', 'step']
return은 'st'
strs = ['start', 'wework', 'today']
return은 ''
답안
function getPrefix(strs) {
if (strs.length === 0) return '';
let prefix = strs[0];
for (let i = 1; i < strs.length; i++) {
while (strs[i].indexOf(prefix) !== 0) {
prefix = prefix.substring(0, prefix.length - 1);
}
}
return prefix;
}
function getPrefix(strs) {
if (strs.length === 0) return '';
let prefix = strs[0];
for (let i = 1; i < strs.length; i++) {
while (strs[i].indexOf(prefix) !== 0) {
prefix = prefix.substring(0, prefix.length - 1);
}
}
return prefix;
}
결과에 따라 prefix의 뒷 스트링을 하나씩 추출하는 방식으로 결과값을 찾아가는 방식! 스택에 있어서 기본기가 엄청 탄탄한 것 같았다.
function getPrefix(strs) {
if (strs.length === 0) return '';
let strArr = strs[0].split('');
let idx = 0;
let stop = false;
for (let i = 0; i < strArr.length; i++) {
let char = strArr[i];
for (let j = 0; j < strs.length; j++) {
let thisStrArr = strs[j].split('');
if (char !== thisStrArr[i]) {
idx = i-1;
stop = true;
break;
}
}
if (stop) break;
}
if (!stop) {
idx = strArr.length - 1;
}
return strArr.slice(0, idx+1).join('');
}
👉🏻 리스트 관련 리스트 관련 자료구조의 이해
👉🏻 리스트 인덱스 선/후에 따라 구분된 조건을 통하여 알고리즘 속도 개선 가능
오답노트
const getPrefix = strs => {
if (strs.length === 0){
return "";
} else {
let tempArr = [];
let tempArr2 = [];
let tempArr3 = [];
// 스트링 끊기
for (let i = 1; i <= strs[0].length; i++){
tempArr.push(strs[0].slice(0,i));
};
console.log(tempArr);
// 끊은 스트링으로 순회하며 배열 안 요소 체크
for (let i = 1; i <strs.length; i++) {
for (let j = 0; j < tempArr.length; j++){
if(strs[i].startsWith(tempArr[j])){
tempArr2.push(tempArr[j]);
}
}
}
console.log(tempArr2);
// 확체크 결과 배열에 대한 횟수 확인
let tempObj = tempArr2.reduce((pv, cv)=>{ pv[cv] = (pv[cv] || 0) + 1; return pv; }, {});
// 객체의 엔트리화
let objEntries = Object.entries(tempObj);
console.log(objEntries);
// 객체의 값을 배열화하고 최대값 산출
let count = Math.max(...Object.values(tempObj));
if (count === strs.length - 1) {
// 산출된 최대값과 엔트리 값을 비교하고 가장 많이 나온 요소 산출
for(let i = 0; i < objEntries.length; i++) {
if(objEntries[i][1] === count) {tempArr3.push(objEntries[i][0])};
}
return tempArr3.pop();
} else {
return "";
}
}
}
const getPrefix = strs => {
if (strs.length === 0){
return "";
} else {
let tempArr = [];
let tempArr2 = [];
let tempArr3 = [];
// 스트링 끊기
for (let i = 1; i <= strs[0].length; i++){
tempArr.push(strs[0].slice(0,i));
};
console.log(tempArr);
// 끊은 스트링으로 순회하며 배열 안 요소 체크
for (let i = 1; i <strs.length; i++) {
for (let j = 0; j < tempArr.length; j++){
if(strs[i].startsWith(tempArr[j])){
tempArr2.push(tempArr[j]);
}
}
}
console.log(tempArr2);
// 확체크 결과 배열에 대한 횟수 확인
let tempObj = tempArr2.reduce((pv, cv)=>{ pv[cv] = (pv[cv] || 0) + 1; return pv; }, {});
// 객체의 엔트리화
let objEntries = Object.entries(tempObj);
console.log(objEntries);
// 객체의 값을 배열화하고 최대값 산출
let count = Math.max(...Object.values(tempObj));
if (count === strs.length - 1) {
// 산출된 최대값과 엔트리 값을 비교하고 가장 많이 나온 요소 산출
for(let i = 0; i < objEntries.length; i++) {
if(objEntries[i][1] === count) {tempArr3.push(objEntries[i][0])};
}
return tempArr3.pop();
} else {
return "";
}
}
}
👉🏻 1. 직접 자르고 비교하여 지저분하게 찾았다
👉🏻 2. Map 오브젝트를 통한 값과 최대값을 비교하여 가장 빈번한 요소 산출
👉🏻 3. 순회한 값 도출
Author And Source
이 문제에 관하여(Code Kata( 5 )), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@simoniful/Code-Kata-5저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)