알고리즘 - 공통된 시작단어 찾기
인자로 들어가는 strs에는 몇 개의 문자열이 들어간 배열이 주어진다.
각 배열에 공통된 시작 단어를 반환하는 함수를 작성하기.
주어지는 배열에는 예를 들면 즉,
["qwerty", "qwertykeyboard", "qwertynickname"]
와 같은 배열이 주어진다면 여기서 qwerty를 뱉어내는 함수를 구현해야 한다.
처음에 든 생각은 먼저 배열 안에서 가장 긴 문자열을 찾은 다음(위 예시에서는 "qwertynickname"가 된다.) 각 배열을 나누어 또 하나의 배열로 만들어 , 각 배열의 첫번째 글자씩을 비교하여 가장 긴 문자열의 길이만큼 for문을 돌려서
같으면 새로운 빈 배열에 push를 하고 아니라면 거기서 끝내버리는 함수를 작성하면 되지 않을까 했었다.
하지만 for문 안에 또 for문을 쓰고, 또 그 안에 if문을 쓰기에는 코드가 너무 복잡해졌고, 또한 변수 i와 j가 내 뜻대로 통제되지 않아 처음 한번 두번을 돌면 아직 뒤에 글자가 남았음에도 비교가 되지 않는 상황에 빠졌다.
그렇게 머리 싸매다 어느 코드를 보았다.
const getPrefix = strs => {
let init = strs[0];
if(init){
for (let i = 0; i < init.length; i++) {
for (let z = 1; z < strs.length; z++) {
while (strs[z].indexOf(init) === -1) {
init= init.substring(0, init.length - 1);
console.log(init)
}
}return init
}} return ""
}
먼저 배열의 첫 번째 요소를 변수로 지정한다(사실 가장 긴 문자열을 찾을 필요도 없었다. 가장 긴 문자열이라도 짧은 문자열에 그 글자가 없으면 말짱 도루묵이었기 때문에)
그 다음 if문을 걸어 init이 존재한다면(true가 될때 까지 계속 while문을 돌린다.)
문자열 배열의 z번째에 첫번째 배열의 글자 indexOf가 존재한다면,
init을 재할당하여 substring함수로 인해 맨 앞에서부터 init의 길이 앞까지 잘라서 return시킨다.
크롬 개발자도구 콘솔창에서 while문을 몇번 돌렸다가 켜 놓았던 여러 개의 창을 여러번 날려먹었던 기억때문에 while문은 쳐다도 보지 않았었는데(사실 조건을 걸지 않는다면 무한루프였기에 for문을 쓰면 되지 굳이 while문을 쓸 일이 있겠나 싶었다.)
while문을 이렇게도 활용할 수 있구나 다시 한번 배우게 되었다.
Author And Source
이 문제에 관하여(알고리즘 - 공통된 시작단어 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jhw4416/algorithm-find-prefix저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)