알고리즘/코드카타

Week1 - Day5 (Javascript)

시럽이 2022. 7. 7. 22:41

문제

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

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

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

 

 

내 Flow

  1. 배열의 요소를 쪼개어 String형으로 변환한다.
  2. 더블 for문으로 각 string의 같은 인덱스에서 같은 문자가 나오면 새로운 빈 배열에 push한다.

 

💬 flow를 생각하고 보니까 배열이 3개인데 그걸 어떻게 한꺼번에 각각의 인덱스를 비교할지... 막혔다. 뇌정지...

 

풀이

const getPrefix = strs => {
  let answer = '';
  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]){
       answer += sortStrs[0][i]
    }else{
       answer
    }
  }
  return answer;
}

 

  1. 일단 최종 답이 들어갈 빈 문자열을 만든다.
  2. 인자로 들어오는 배열을 sort를 이용해 정렬해준다. sort를 이용하면 모든 원소들을 비교 할 필요 없이 시작과 끝만 비교해 문제를 해결할 수 있게 된다.
  3. 어떤 값들이 들어올 지 모르기 때문에(ex, undefined...) 만약 배열의 길이가 0이라면 그대로 '' 빈 값을 반환한다는 조건을 추가한다.
  4. 첫번째 문자의 i번째 글자와 마지막 글자의 i번째 글자가 같다면 계속해서 빈 문자열에 추가해준다. 만약 같지 않게 된다면 그동안 추가해준 그 값을 바로 반환한다.

 

 

 

참고

https://bit.ly/3PsHYni

 

'알고리즘 > 코드카타' 카테고리의 다른 글

Week2 - Day3 (Javascript)  (0) 2022.07.14
Week2 - Day2 (Javascript)  (0) 2022.07.14
Week2 - Day1 (Javascript)  (0) 2022.07.11
Week1 - Day3 (Javascript)  (0) 2022.07.06
Week1 - Day2 (Javascript)  (0) 2022.07.05