[TIL]210226

박성진·2021년 2월 26일

문제

문자열을 입력받아 문자열 내에 아래 중 하나가 존재하는지 여부를 리턴해야 합니다.
'a'로 시작해서 'b'로 끝나는 길이 5의 문자열
'b'로 시작해서 'a'로 끝나는 길이 5의 문자열

내가 작성한 코드

function check(str) {
  // 먼저 대소문자의 구분을 받지 않도록 인자로 받는 문자열을 소문자로 변경시켜주엇다.
  str = str.toLowerCase();
  for(let i = 0; i < str.length; i++) {
    // 만약 반복문을 돌면서 'a'를 만난다면 안의 반복문을 실행한다.
    if(str[i] === 'a') {
      // 시작하는 문자가 'a' 문자열일때 5번째 길이의 문자가 'b'라면 리턴 true 를 실행하게 해주었다.
      if(str[i + 4] === 'b') {
        return true
      }
      // 반복문을 돌면서 문자가 'b'라면 
    } else if(str[i] === 'b') {
      // 시작하는 문자가'b'문자열일때 5번째 길이의 문자가 'a'라면 리턴 true 를 실행하게 해주었다.
      if(str[i + 4] === 'a') {
        return true
      }
    }
  }
  // 반복문을 다돌아도 안의 조건문이 실행되지 않는다면 false를 리턴한다.
  return false
}

레퍼런스

function check(str) {
  // 인자로 받은게 undefined라면 false를 리턴한다.
  if (str === undefined) {
    return false;
  }
  // 먼저 대소문자의 구분을 받지 않도록 인자로 받는 문자열을 소문자로 변경시켜주었다.
  str = str.toLowerCase();
// 최소 길이가 5는 되야하기 때문에 i를 4부터 넣어 반복문을 실행한다.
  for (let i = 4; i < str.length; i++) {
    // 반복문을 돌리면서 'a'를 만나고 그인덱스의 -4 가 'b' 이거나 'b'를 만나고 그인덱스의 -4 가 'a' 라면 true를 리턴한다.
    if (
      (str[i] === 'a' && str[i - 4] === 'b') ||
      (str[i] === 'b' && str[i - 4] === 'a')
    ) {
      return true;
    }
  }
// 아무것도 해당되지 않으면 false를 실행한다.
  return false;
}

내가쓴 코드는 'a'나 'b'를 만나면 그인덱스의 +4번째에 'a'나'b'인지 확인하였고 레퍼런스는 끝의 문자열을 기준으로 확인하였다. 그래서 처음 레퍼런스를 볼떄 왜 반복문의 i 가 4부터 시작하는지 이해하기가 살짝 어려웠다.
사람마다 쓰는 코드가 다 다를 수 있으니 조금 더 간결할게 쓸 수 있도록 계속해서 시도해야겠다.

0개의 댓글