Algorithm / Code Kata / W1D5 공통된 시작 글자 구하기

위코드 코드카타 1주 5일차 문제 리뷰

strs은 단어가 담긴 배열입니다. 공통된 시작 단어(prefix)를 반환해주세요.

예를 들어 strs = ['start', 'stair', 'step']return'st'이고 strs = ['start', 'wework', 'today']return''이다.

Code

const getPrefix = (strs) => {
  const arr = [];
  const prefix = strs[0];
  if (prefix === undefined) return "";

  for (let i = 1; i < strs.length; i++) {
    for (let j = 0; j < prefix.length; j++) {
      if (prefix[j] === strs[i][j] && prefix[j + 1] === undefined) {
        arr.push(j + 1);
        break;
      } else if (prefix[j] !== strs[i][j]) {
        arr.push(j);
        break;
      }
    }
  }
  return prefix.slice(0, Math.min(...arr));
};

대략적인 흐름은 prefix에 인자에 들어올 배열의 가장 처음 단어로 설정하고 이를 남은 배열의 요소들과 글자까지 비교한다. 이후 공통되지 않은 글자가 시작하는 인덱스를 arr에 저장한다. arr에서 최소값을 구해 prefix에서 앞에서부터 잘라 공통 글자들을 구한다.

테스트를 위해 사용한 배열들

let strs1 = ['preorder', 'prefix'];
let strs2 = ['rewrite', 'reset', 'redo', 'restart'];
let strs3 = ['extracurricular', 'extraservice', 'extraordinary', 'extramood'];
let strs4 = [];
let strs5 = ['coexist', 'decode', 'infield'];
let strs6 = ['mistake', 'misunderstand', 'misfire'];

배열 양끝에 한 글자로 시작하는 공통된 글자를 가진 배열, 빈 배열 등등 다양한 상황을 상정하여 만들었다.


눈이 편안한 코드 리뷰


const getPrefix = (strs) => {
    let prefix = strs[0];    
    if(strs.length === 0){	 
        prefix = "";
    }
    for(let i=1; i<strs.length; i++){            
        while(strs[i].indexOf(prefix) !== 0){               
            prefix = prefix.substring(0, prefix.length-1)
        }
    }
    return prefix;
}

while, indexOf 그리고 substring