[codeKata]Day3 반복되는 문자열 갯수 구하기

Joah·2022년 6월 13일
0

자료구조

목록 보기
3/11

문제


이번 문제는 도저히 어떻게 접근해야 할지 막막했다.

첫 번째 접근

일단 문자열을 배열로 변환했다.

const getLengthOfStr = str => {
  // 아래 코드를 작성해주세요.
  const arr = str.split("")
  for (let i = 0; i < arr.length; i++) {
    //여기서 코드를 어떻게 구현해야 하는지 팀원들 모두 살짝 막막했다.
   }
  return max;
}

마지막 접근(feat.다른 팀원의 코드 참고)

다른 팀원의 조언으로 구글링을 하며 메소드와 로직을 찾아나갔다.

const getLengthOfStr = str => {
  // 아래 코드를 작성해주세요.
  let currentString = "";
  let max = 0;
  let char = "";
  for (let i = 0; i < str.length; i++) {
    char = str.charAt(i);
    if (currentString.indexOf(char) !== -1) {
    currentString = currentString.substr(currentString.indexOf(char) + 1);
    }
    currentString = currentString + char;
    max = Math.max(max, currentString.length);
  }
  return max;
};
console.log(getLengthOfStr("ababab"));
  • 반복문을 문자열의 길이만큼 돌린다.

    첫 번째 반복문

  • 빈 문자열인 char에 문자열의 i번째 인덱스 번호에 위치하는 문자를 할당한다.

  • 처음엔 "abcabcabc"에서 0번째 인덱스인 "a"가 char에 할당된다.

  • 만약 초깃값이 빈 문자열인 currentStringchar에 할당된 인덱스 번호의 문자열 즉, "a"가 !==-1 이라면
    이는 currentString에 "a"문자열이 없다면 -1을 반환한다. 조건문에서는 -1이 아니라면 true고 -1이 맞다면 false이기 때문에 if문이 종료되고 다음 명령문을 실행하게 된다.

  • 위의 조건문에서 false를 반환했기에 currentString에 현재 char의 값인 "a"를 재할당한다.

  • 그리고 Math메소드를 실행하여 괄호 안의 인자 중에서 max인 값을 max에 재할당 하는데 위에서 max를 선언할 때 0값이 주어졌고 currentStringlength는 1이기 때문에 max에는 1이라는 값이 재할당 되었다.


  • i의 값은 1이 된다.

    두 번째 반복문

  • char에는 "b"가 재할당된다.

  • 첫 번째 반복문과 같은 로직을 실행한다.

  • 결과적으로 max에는 2가 할당되고, currentString에는 "ab"가 할당된다.


  • i의 값은 2가 된다.

    세 번째 반복문

  • char에는 "a"가 재할당된다.

-if문의 조건에서 currentString에는 "a"가 할당되어 있어 조건문에서 true를 반환하게 된다. 바로 다음 명령문을 실행한다.


  • i의 값은 3이 된다.

    네 번째 반복문

  • char에는 "b"가 재할당된다.

  • 위의 과정을 똑같이 거친다. 대신 currentString으로 "a"가 반환된다.


결과적으로 max의 값은 처음 "ab"의 길이인 2를 반환한 값이 반복문이 끝날때까지 이어진다.
따라서 반복되는 글자의 갯수는 2가 된다.


조건문을 활용한 문자의 존재 확인

만약 반복되지 않은 문자열이라면 if의 조건문에서 false를 반환하여 max의 값을 증가시킨다.

max를 활용한 반복되는 문자열의 길이 확인

반복되지 않은 문자열 즉, "ab" 의 문자열 길이를 max에 담아준다. 결과적으로 max를 반환한다.

반복되는 문자열이 있다면 substring메소드를 사용하여 반복되는 문자열을 제거한다

"ab"에서 비교 문자열이 "a"라고 가정하면 a의 인덱스 번호 0 + 1을 계산하여 마지막 문자열만 반환되게 로직을 작성한다. 따라서 반복문에서 다음에 반환하는 문자와 지금 currentString의 값과 비교할 수 있다.

profile
Front-end Developer

0개의 댓글