[CodeKata] Day3 & Day4

String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트 return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어, str = "abcabcabc" return 은 3 => 'abc' 가 제일 길기 때문
str = "aaaaa" return 은 1 => 'a' 가 제일 길기 때문
str = "sttrg" return 은 3 => 'trg' 가 제일 길기 때문

const getLengthOfStr = (str) => {
  let result = []; // 인자가 담길 수 있는 빈 배열.
  let resultLength = 0;// 가짜로 정해준 값.
  
  // ➊ 
  for(let i=0; i < str.length; i++){
    if(result.indexOf(str[i]) === -1){
      result.push(str[i]);
      
      // ➌
      if(resultLength < result.length){
        resultLength = result.length;
      }
    }else{ // ➋
      result = result.slice(result.indexOf(str[i]) +1);
    }
  }
  return resultLength;
};

getLengthOfStr("sttrg") // -> 2
  • ➊ 번에서 조건문을 돌리며, 인자값이 result에 없다면, push 해 준다.
    조건문이 돌면서 result 에는 ['s','t'] 가 담긴다.
  • ➋ 조건문을 돌면서, 인덱스번호 3번인 't' 차례일 때, if-> 이미 배열에 t가 있기때문에 else로 넘어간다.

여기서, slice메서드로 잘라주는데,(인덱스번호 3번과 같은,그 중 가장 첫번째 번호를 반환해주는 indexOf메서드를 사용한다. 그리고 +1을 하여서 반환 해준 값까지 자를 수 있게 해 준다.)

이 부분에서 도대체 왜 +1을 해주는 건지 이해를 못했었는데,
indexOf 속성을 잘 인지하지 못해서 코드를 이해 할 수 없었던 것 같다.
안에 있는 배열이 다 삭제되었으니, 다시 빈 배열에 넣어준다.

  • ➌ 1,2,3번을 계속 한번씩 돌면서 최종적으로 배열에 남은 길이를 반환 해 준다. 가짜로 정해준 resultLength 의 값은 계속 바뀌는것이고, str의 길이가 끝날 때 까지 무한반복 하면서 마지막에 남는 값이 반환되는 것이다.

여기서 왜 resultLength 의 값을 임의로 정해준건지 이해가 안되어서 변수를 선언하지 않고,➌번에서 바로 리턴을 해줘봤는데, 조건문을 돌면 매번 ➌번의 값이 재할당 되어야 최종 길이가 나오지만, 리턴을 해버리면 바로 중지가 되기때문에
1이 반환되는 것을 확인 할 수 있었다.
역시 리턴은 신중하게 해줘야 하는것을 다시한번 느꼈다.
(근데 이거 푸신분들은 정말 대단하신듯..금방 이해하신 분들도..)

숫자인 num을 인자로 넘겨주면,
뒤집은 모양이 num과 똑같은지 여부를 반환해주세요.
num: 숫자 return: true or false (뒤집은 모양이 num와 똑같은지 여부)
예를 들어,
num = 123 return false => 뒤집은 모양이 321 이기 때문
num = 1221 return true => 뒤집은 모양이 1221 이기 때문
num = -121 return false => 뒤집은 모양이 121- 이기 때문
num = 10 return false => 뒤집은 모양이 01 이기 때문

const sameReverse = num => {
  let resultNum = num.toString(); //인자를 string 으로 변환
  let result = resultNum.split('').reverse().join('');
  
  if(resultNum === result){
    return true;
  }else{
    return false;
  }
} 

2일차 문제에서 배운 메서드들이 도움이 되었다..!

좋은 웹페이지 즐겨찾기