글 작성자: 개발자 올라프

문제

 

strs은 단어가 담긴 배열이다. 공통된 시작 단어(prefix)를 반환하기로 한다.

 

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

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

 


 

const getPrefix = strs => {
    let prefix = ''; // prefix 없을 경우 ''을 반환한다.
    let sortStrs = strs.sort();
  
    if(sortStrs.length === 0){
    	return ''
    }

    for(let i = 0; i <sortStrs[0].length; i++){
        if(sortStrs[0][i] === sortStrs[sortStrs.length-1][i]){
            prefix += sortStrs[0][i]
            console.log(prefix);
        }else{
      		break;
        }
    }
    return prefix;
}

 

sorting 하는 이유

let sortStrs = strs.sort();

문제는 모든 단어들을 비교해서 공통된 시작 단어(prefix)를 반환하는 것이다. 단어를 정렬하면 첫 번째 값과 마지막 값만 비교해도 공통으로 시작하는 단어를 찾을 수 있다.

 

예를 들어 prezzz, preccc, prebbb, preaaa라는 단어를 정렬하면 preaaa, prebbb, preccc, prezzz로 정렬되며 굳이 중간에 있는 값들을 비교하지 않고 처음과 끝 값만 비교해도 어떤 단어가 공통으로 시작되는지 찾아낼 수 있다.

 

정렬된 첫 번째 값과 마지막 값 비교

 for(let i = 0; i <sortStrs[0].length; i++){
    if(sortStrs[0][i] === sortStrs[sortStrs.length-1][i]){
        prefix += sortStrs[0][i]
        console.log(prefix);
    }else{
        break;
    }
}

첫 번째, 마지막 값의 알파벳을 앞에서부터 비교하고 prefix에 공통 단어를 추가한다. i의 반복 횟수는 첫 번째 단어의 길이만큼 설정했는데 그 이상 비교하는 것은 의미 없다. 왜냐하면 모든 단어의 공통된 시작 단어를 찾는 것인데 첫 번째 단어의 길이만큼 모두 같다면 그 자체가 공통 시작 단어인 것이다.

 

else { break; }는 공통 단어가 아닐 경우 바로 반복문을 빠져나갈 수 있도록 했다.