Code Kata Day 5

SYhwang·2023년 1월 21일
0

코드카타

목록 보기
5/10

문제

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 분기로 지저분하게 억지로 풀어낸 느낌이라 아쉽다.

0개의 댓글