Code Kata( 3 )

simoniful·2021년 5월 31일
0

CodeKata

목록 보기
3/7
post-thumbnail

문제

String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.

str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)

예를 들어,
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문

str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문

str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문


답안

const getLengthOfStr = (str) => {
  let sliceStr = [];
  let lastStr = 0;

  for (let i = 0; i < str.length; i++) {
  // 중복값이 없는 배열 생성, 문자열의 
      if (sliceStr.indexOf(str[i]) === -1) {
      	sliceStr.push(str[i]);
        if (lastStr < sliceStr.length) {
            lastStr = sliceStr.length;
        }
      } else {
      	sliceStr = sliceStr.slice(sliceStr.indexOf(str[i]) + 1);
      	sliceStr.push(str[i]);
      }
  }
  return lastStr;
};

👉🏻 Array.slice() 시작 인덱스부터 선정 인덱스 바로 앞까지 잘라냄
👉🏻 Array.indexOf() 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환
👉🏻 풀이
👉🏻 슬라이딩 윈도우 1
👉🏻 슬라이딩 윈도우 2


오답노트

const getLengthOfStr = str => {
  if (str === '') {
    return 0
  } else {
    // 배열 중복 요소 체크 helper
    function getUniques(array) { return [... new Set(array)]; }
    let tempArr = [];
    let resultArr = [];
    // 각 알파벳 단위 자르기 
    for (let i = 0; i < str.length; i++) {
      for(let j = str.length; j > i; j--) {
        tempArr.push(str.slice(i,j));
      }
    }
    // 길이 순 정렬
    tempArr.sort((a, b) => a.length - b.length);
    // 문자열 중복요소 체크 후 비교하여 새 배열 만듬
    for(let i = 0; i < tempArr.length; i++) {
      if(getUniques(tempArr[i].split("")).join("").length === tempArr[i].length) {
        resultArr.push(tempArr[i]);
      };  
    }
    // 가장 긴 index 검색
    let reseltIndex = resultArr.map(el => el.length);
    return Math.max(...reseltIndex);
  }
}

👉🏻 1. 알파벳을 자르는 경우를 배열화
👉🏻 2. 중복되는 알파벳의 경우를 제거해버린 후 1번 배열과 비교하여 새 배열제작
👉🏻 3. 결과 배열에서 가장 긴 길이 요소 검색
👉🏻 4. 슬라이딩 윈도우 알고리즘 연습 필요

profile
소신있게 정진합니다.

0개의 댓글