[Codekata] JavaScript

link717·2020년 10월 8일
0

codekata

목록 보기
1/5
post-thumbnail

😥 Question?

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

예시)
str = "abcabcabc"
return3
=> 'abc' 가 제일 길기 때문

str = "aaaaa"
return1
=> 'a' 가 제일 길기 때문

str = "sttrg"
return3
=> 'trg' 가 제일 길기 때문


작성한 코드)
const getLengthOfStr = str => {
  let subStr = ''; //str의 각각의 알파벳 기준, 만들 수 있는 제일 긴 단어를 저장하는 변수
  let answer = []; //str의 각각의 알파벳으로 만든 제일 긴 단어를 저장한 배열 
  
  if (str.length === 0) {
    return 0;
  } else {
    for (let j = 0; j < str.length; j++) {
      for (let i = j; i < str.length; i++) {
        if (!subStr.includes(str[i])) {
          subStr+=str[i];
        } else {
          answer.push(subStr.length);
          subStr='';
          break;
        }
      }
    }
    return Math.max(...answer);
  }
};

😏 Idea!

str 각각의 알파벳을 기준으로 for문을 돌려서 중복되지 않은 제일 긴 단어를 array 형태로 만든다. 그 array의 값 중 길이가 제일 긴 단어의 길이를 return하면 풀이 완료! 처음에 for문 작성시 break를 사용하지 않아 infinite loop에 risk가 있었으나 적절히 잘 사용하여 해결하였다!

사실 처음에 완전 다른 방식으로 접근해서 부분적으로 fail이 됐는데, 시간이 오래걸렸지만 같은 기수분들의 아이디어를 듣고나서 작성했더니 풀렸다! (동기사랑 나라사랑 😊)

str = "sttrg";
answer = [2,1,3]
// 2 : st의 길이
// 1 : t의 길이
// 3: trg의 길이

그 뒤는 중복되는 알파벳이 없어서 추가로 실행되지 않는다.

이후 answer array의 값 중 제일 큰 값을 return!
profile
Turtle Never stop

0개의 댓글