[codeKata] Day5 공통된 시작 단어 반환

Joah·2022년 6월 13일
0

자료구조

목록 보기
5/11

문제

첫 번째 접근

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"

profile
Front-end Developer

0개의 댓글