[Code Kata] JavaScript #5

ojae kwon·2021년 4월 30일
0
  1. 문제

    * strs은 단어가 담긴 배열입니다. 공통된 시작 단어(prefix)를 반환해주세요.
    ex) strs = ['start', 'stair', 'step'], return은 'st'

  1. 문제 해결 방법 구상

    1) 각 배열 값들을 비교 하고, 자릿수도 비교해야 하므로 이중 for 문을 써야겠다고 판단했습니다.

    2) 각 값의 비교의 의 종료 조건은 인자 의 배열길이로, 각 자리수의 비교의 종료 조건은 배열의 값중 최소길이 값을 기준으로 했습니다. (예시 처럼 5글자,5글자,4글자 인경우 5번째 문자의 비교는 의미가 없기 때문에)


  2. 코드 작성

const getPrefix = (strs) => {
  let result = [];
  let minlen = 0;

  for (let j = 1; j < strs.length; j++) {					// 인자내 배열 내의 값 중 최소길이를 구하는 for 문
    minlen = strs[0].length;
    if (minlen > strs[j].length) {
      minlen = strs[j].length;
    }
  }
  if (strs.length === 0) {							// 인자가 빈 배열일시 return "" 하고 함수 종료
    return "";
  } else {
    for (let t = 0; t < minlen; t++) {						// 문자 비교는 가장 짧은 문자 길이 만큼만 하는 for 문 작성
      for (let i = 0; i < strs.length - 1; i++) {				// 각 배열값의 문자 비교를 위한 for 문
        if (!(strs[i][t] === strs[i + 1][t])) {
          break;								// 문자가 다를시 바로 반복문 종료, 다음자리 글자로 넘어감
        } else if (strs[i][t] === strs[i + 1][t] && i === strs.length - 2) {	// 모든 값을 비교하고 마지막 이전 값과 마지막 값의 비교까지 진행됐을때 현재 그 문자를 result 배열에 할당 하는 if 문.
          result.push(strs[i][t]);
        }
      }
    }
  }

  return result.join("");							// 배열에 들어온 값을 하나의 문자열로 합쳐서 return
};

  1. 작성 후 알게 된 점

    1) 새로운 함수를 만들 때, 필요에 의해서 함수내부나 반복문 안에서 변수를 선언 할 때가 있는데, 이때 되도록이면 변수는 변수가 작동할 scope 안에서 선언하고 사용하는 것이 좋고, 그 변수가 scope 밖에서 필요하다고 할 시 다른 부분에 영향을 주지 않고 잘 호출 하도록 신경을 써야 할 것 같습니다.

0개의 댓글