[알고리즘] 공통된 시작 단어 반환

lilyoh·2020년 10월 14일
0

문제

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

예를 들어
strs = ['start', 'stair', 'step']
return은 'st'

strs = ['start', 'wework', 'today']
return은 ''

풀이

const strs = ['start', 'stair', 'step', 'stop'];

const getPrefix = (strs) => {
    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)
            // console.log('prefix:' + prefix)
        }
    }
    return prefix;
}

실패한 풀이

const strs = ['start', 'stair', 'step']

let firstWord = strs[0];
let arr = [];

for (let i = 0; i < firstWord.length; i++) {
  for (let j = 1; j < strs.length; j++) {
    if((firstWord[i] === strs[j][i]) && !arr.includes(firstWord[i])) {
      arr.push(firstWord[i])
    }
  }
}

배열의 첫 번째 요소를 기준이 되는 단어로 정한다. 기준이 되는 단어의 알파벳을 하나씩 꺼낸다. 배열의 1번 인덱스부터 같은 위치에 알파벳이 있는지 확인한다. 같은 위치에 알파벳이 있으면 해당 알파벳을 배열에 넣는다. -> 이런 방법으로 생각을 해서 풀려고 했다. 그런데 출력값이 ['s', 't', 'a'] 가 나왔다. 'a'는 나오면 안되는데...! 생각을 하다가 안 풀려서 구글링을 했다. 훨씬 쉽고 간단한 풀이가 나왔다. 단어를 통으로 비교하고 일치하지 않으면 기준이 되는 단어의 알파벳을 뒤에서부터 하나씩 자르는 풀이이다.

배운 것

  • indexOf()로 단어 a가 단어 b를 포함하고 있는지 확인할 수 있다. 포함하면 0, 포함하지 않으면 -1을 반환한다.
  • while문은 조건문이 일치하는 동안 본문을 실행한다. while문을 잘 사용하자. while문이 for문보다 속도가 빠르다고 한다.

0개의 댓글