strs은 단어가 담긴 배열입니다. 공통된 시작 단어(prefix)를 반환해주세요.
strs | return |
---|---|
['start', 'stair', 'step'] | 'st' |
['start', 'wework', 'today'] | '' |
const getPrefix = strs => {
let result = strs[0];
if(strs.length === 0) { // 배열 속 단어가 없을 때
result = '';
} else { // 배열 속 단어가 한 개 이상일 때
for (let i = 1; i < strs.length; i++) {
let sameWord = '';
for (let j = 0; j < strs[i].length; j++) {
if (result[j] === strs[i][j]) {
sameWord += strs[i][j];
}
}
result = sameWord;
}
}
return result;
}
['start', 'stair', 'step']
라는 배열이 strs로 들어왔다고 가정해볼게요. 세 글자의 공통된 시작단어를 반환해야해요. 우선 0번째 단어인start
과 1번째 단어인stair
를 비교해 공통된 시작단어를 빈 문자열인 sameWord
란 변수에 새롭게 저장해줄거예요. sameWord
에 새롭게 저장된 단어는 sta
가 되겠죠. 그러면 sta
와 2번째 단어인 step
을 비교합니다. 그러면 공통된 단어로 st
가 나오겠죠? 그러면 sameWord
를 st
로 갱신해줍니다. 이러한 과정을 반복한다면 배열 속 모든 단어의 공통된 시작단어을 순차적으로 걸러낼 수 있어요.
# 배열에 단어가 없을 때
- 빈 문자열(
''
)을 return해줍니다.
◾ 배열에 단어가 없을 때의 조건을 설정해주지 않으면undefined
가 출력됩니다. 왜냐하면result
가 선언되어는 있지만 아무런 값도 할당되지 않은 채로 return하고 있기 때문이에요. 빈 문자열(''
)이 return될 수 있도록 설정해주어야 해요!
◾ 값이 할당되지 않은 변수에 접근할 때 JavaScript는undefined
를 출력한다는 것 꼭 기억하기!
# 배열에 단어가 한 개 이상일 때
- 배열의 0번째 단어를 기준으로 잡고, 1번째 단어부터 순차적으로 돌기
◾ 그래서 변수result
는 strs배열의 첫 번째 단어(strs[0]
)로 초기화 시켰고, 첫번째 for문은 배열의 0번째 요소부터가 아닌 1번째 요소부터로 설정했어요.let i = 1
인걸 확인할 수 있어요.
- 빈 문자열인
sameWord
란 변수에 공통 시작단어 저장
◾['start', 'stair', 'step']
가 strs배열이라고 했을 때,'start'
와'stair'
의 공통된 시작단어는sta
입니다. 이 단어를sameWord
란 빈문자열에 저장해줘요.
- 공통 시작단어가 저장된
sameWord
를result
로 갱신
◾sta
가 다 저장되면result
를sameWord
로 갱신해줍니다. 왜냐하면 이제는 0번째 단어가 아닌, 0번째 단어와 1번째 단어를 비교해 나온sta
인sameWord
를 기준으로 2번째 단어와 비교해줘야하기 때문이에요.
◾sta
가 된result
와 2번째 단어인step
의 공통된 시작단어인st
가 다시sameWord
에 한 글자씩 저장 될것이고, 저장이 다 끝나면result
를sameWord
로 갱신시켜줍니다.
- 0번째 1번째에서 공통된 단어가 걸러지고, 그렇게 걸러진 단어와 2번째 단어를 비교해서 또 걸러내고, 그렇게 걸러진 단어와 3번째 단어와 비교해서 또 걸러내고.. 이런 과정을 계속 반복해 최종적으로 배열 속 모든 글자에 공통된 시작단어를 뽑아낼 수 있습니다.