코드카타 #3

김태현·2020년 11월 6일
0

코드카타

목록 보기
5/9
post-thumbnail

오늘 문제는 정말 어려웠다.
중복을 찾는 로직을 생각해내는게 많이 어려웠는데
처음에는 split('')으로 다 나눈다음에 반복문으로 인덱스를 돌면서 중복검사를 하려고했다.
하지만 경우가 너무 많아지고 복잡해져서 포기
그 다음에 indexOf를 사용해서 -1을 반환하지 않는경우를 생각하면서 중복검사를 해보려고 헀으나 이 방법도 잘되지 않았다!

옆자리 현지님은 Map을 이용하고 바이너리 알고리즘? 이런걸로 푸셨다는데 나한테 설명을 친절하게 해주어도 너무 낯선 개념이라 바로 응용하는게 어려웠다...
결국 못 알아듣고 포기

구글링 도중 좋은풀이가 있어서 참고를 했다.

우선 문제!

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

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

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

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

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

풀이 코드는 다음과 같다.

const getLengthOfStr = str => {
  let sliceArr = [];
  let sliceLength = 0;
  
  for (let i = 0; i < str.length; i++) {
    if(sliceArr.indexOf(str[i]) === -1) {
      sliceArr.push(str[i]);
      
      if(sliceLength < sliceArr.length) {
        sliceLength = sliceArr.length;
      }
    }
    
    else {
      sliceArr = sliceArr.slice(sliceArr.indexOf(str[i]) + 1);
      sliceArr.push(str[i]);
    }
  }
  
  return sliceLength;
}

getLengthOfStr('sttrg');

우선 배열과 길이를 선언하고 초기화 한다.

그리고 반복문을 돌면서 배열에 str문자가 있는지를 확인하고
없으면 push해서 배열에 넣어주고 없으면 있으면 기존에 있던 중복된 값 다음부터 짤라서 push 해준다.
그리고 sliceLength를 반환하는데 만약 sliceLength 보다 sliceArr의 길이보다 클 경우 sliceArr의 길이로 값을 갱신해준다.

느낀점
많이 어려웠다.
사고를 전개하는 방식이 아직 많이 미숙한것 같다.
slice 함수에 대해서 어렴풋이 알고있었는데 이참에 더 공부해야겠다.

profile
프론트엔드 개발자

0개의 댓글