strs은 단어가 담긴 배열입니다.
공통된 시작 단어(prefix)를 반환해주세요.
예를 들어
strs = ['start', 'stair', 'step']
return은 'st'
strs = ['start', 'wework', 'today']
return은 ''
function getPrefix(strs) {
const prefixArr = [];
if (strs.length === 0) { return "" }
if (strs.length === 1) { return strs[0] }
block: for (i = 1; i < strs.length; i++) {
let pretest = ""
for (j = 0; j < strs[0].length; j++) {
if (strs[i][j] === strs[0][j]) {
pretest = pretest + strs[i][j]
if (j === strs[0].length -1 ) {
prefixArr.push(pretest) }
} else {
if ( j === 0 ) { return "" }
prefixArr.push(pretest)
continue block;
}
}
}
const prefix = prefixArr.reduce((acc, cur) => {
if (Math.min(acc.length, cur.length) >= acc.length) {
return acc
} else {
return cur
}
})
return prefix
}
strs[0]과 뒤의 요소들의 알파벳 순서를 for문 안에서 비교해서 처음 글자부터 겹치는 알파벳 까지를 prefixArr에 push 해서 풀었다.
예로 getPrefix(['start', 'stair', 'step', 'street', 'stars'])라면 이중 for 문 안에서 뒤의 요소들을 첫 요소인 start와 비교한 뒤 겹치는 알파벳을 모아 prefixArr에 push 한다. (아예 첫 번째 비교부터 겹치는 알파벳이 없다면 바로 ""를 return 한다)
결과 : prefixArr ['sta', 'st', 'st', 'star']
그리고 나서 prefixArr.reduce()
와 Math.min()
을 이용해 prefixArr 안의 요소들을 비교해 가장 길이가 짧은 요소를 prefix에 저장하고 prefix를 return 한다.
테스트시 빈 배열이 들어왔을 때 오류가 발생하는 것을 발견, 맨 위로 올라가 요소가 0개 혹은 1개인 strs가 들어왔을 때의 처리를 따로 해주었다.
이번 주 코드카타 문제 중 가장 어려웠다. 험난... 풀고 생각해보니 더 고민했으면 substring
이나 slice
를 써서 훨씬 깔끔하게 풀 수 있었을 것 같은데 3일차에 풀었던 것과 비슷한 방법으로 해결하려고 밀어붙이는 바람에 for 안 수많은 if 분기로 지저분하게 억지로 풀어낸 느낌이라 아쉽다.