[CodeKata] 공통된 시작단어 반환하기 (JavaScript)

혜린·2022년 9월 4일
1
post-thumbnail

🔐 문제


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

입출력 예제

strsreturn
['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가 나오겠죠? 그러면 sameWordst로 갱신해줍니다. 이러한 과정을 반복한다면 배열 속 모든 단어의 공통된 시작단어을 순차적으로 걸러낼 수 있어요.


풀이 과정

# 배열에 단어가 없을 때

  1. 빈 문자열('')을 return해줍니다.
    ◾ 배열에 단어가 없을 때의 조건을 설정해주지 않으면 undefined가 출력됩니다. 왜냐하면 result가 선언되어는 있지만 아무런 값도 할당되지 않은 채로 return하고 있기 때문이에요. 빈 문자열('')이 return될 수 있도록 설정해주어야 해요!
    ◾ 값이 할당되지 않은 변수에 접근할 때 JavaScript는 undefined를 출력한다는 것 꼭 기억하기!

# 배열에 단어가 한 개 이상일 때

  1. 배열의 0번째 단어를 기준으로 잡고, 1번째 단어부터 순차적으로 돌기
    ◾ 그래서 변수 result는 strs배열의 첫 번째 단어(strs[0])로 초기화 시켰고, 첫번째 for문은 배열의 0번째 요소부터가 아닌 1번째 요소부터로 설정했어요. let i = 1인걸 확인할 수 있어요.

  2. 빈 문자열인 sameWord란 변수에 공통 시작단어 저장
    ['start', 'stair', 'step']가 strs배열이라고 했을 때, 'start''stair'의 공통된 시작단어는 sta입니다. 이 단어를 sameWord란 빈문자열에 저장해줘요.

  3. 공통 시작단어가 저장된 sameWordresult로 갱신
    sta가 다 저장되면 resultsameWord로 갱신해줍니다. 왜냐하면 이제는 0번째 단어가 아닌, 0번째 단어와 1번째 단어를 비교해 나온 stasameWord를 기준으로 2번째 단어와 비교해줘야하기 때문이에요.
    sta가 된result와 2번째 단어인 step의 공통된 시작단어인 st가 다시sameWord에 한 글자씩 저장 될것이고, 저장이 다 끝나면 resultsameWord로 갱신시켜줍니다.

  4. 0번째 1번째에서 공통된 단어가 걸러지고, 그렇게 걸러진 단어와 2번째 단어를 비교해서 또 걸러내고, 그렇게 걸러진 단어와 3번째 단어와 비교해서 또 걸러내고.. 이런 과정을 계속 반복해 최종적으로 배열 속 모든 글자에 공통된 시작단어를 뽑아낼 수 있습니다.
profile
FE Developer

0개의 댓글