본문 바로가기
D.evelop [CS]/Algorithm

[Algorithm 004] JS - 주어진 문자열에서 문자의 인덱스 찾기

by Danne 2021. 9. 11.

Q. 주어진 문자열에서 첫 번째 'a'의 index찾기

조건 1 : 만약 문자가 문자열에 존재하지 않는다면, -1 을 반환

조건 2 : indexOf 함수를 사용하지 말것

 

//주어진 문자열
const output = getFind('a', 'I am a hacker')

 

 

A. 처음 제출한 답

function getFind(filter, sentence) { 

  let arr = sentence.split("");

  let result = sentence.includes('a')

  if ( result === true ){
    return result
  } else {
    return -1
  }
  
}

// true
  • 먼저 split 메서드를 사용해 sentence값으로 들어오는 'I am a hacker'문자열을 쪼개어 배열로 만든다.

 

그 다음 a를 포함하는 지 아닌지 체크 후 

조건에 따라 뭔가를 return하려고 했다가.

 

 

못함.

 

 

 

A. 수정해 본 답

function getFind(filter, sentence) { 

  let arr = sentence.split("");
  
  for(let i = 0 ; i < arr.length ; i++){
    if(filter === arr[i]){
      return i
    }
  }
  
  return -1
  
}

// 2

 

for문을 추가해 문제를 다시 풀었다.

  • 문자열을 split으로 쪼개 담은 배열 arr를 for문으로 돌면서
  • if문으로 해당 값과 filter로 받아오는 문자열 'a'값과 일치하는지 확인
  • 일치하면 그 index값을 return하는 것

 

function getFind(filter, sentence) { 

  let arr = sentence.split("");
  
  for(let i = 0 ; i < arr.length ; i++){
    if(filter === arr[i]){
      return i
    } else {
      return -1
    }
  }
  
}

// -1

이 때 'a' 가 존재하지 않을 때의 반환문을 if else문으로 붙여버린다면

for 문이 첫 턴에서 -1를을 반환하고 함수를 나가버림

 

 

B. 만약 indexOf를 사용해도 된다면?

function getFind(filter, sentence) { 

  let arr = sentence.split("");
  let check = [];
  
  for(let i = 0 ; i < arr.length ; i++){
      check.push(arr[i])
  }

   return check.indexOf('a')
  
}

// 2

 

 

 

그리고 동기분들이 알려준 방법

C. search메서드를 활용해서 초간단하게 풀어보기

function getFind(filter, sentence) { 
  return sentence.search('a')
}

// 2

 search()메서드 

  • 정규표현식과 주어진 스트링 간에 첫번째로 매치되는 것의 인덱스를 반환.
    매치되는 값이 없으면 -1 을 반환 (MDN명세)

 

 

 

 

반응형

댓글