JavaScript/알고리즘

프로그래머스 접두사인지 확인하기 JS ( startsWith() / +연산자로 Boolean값 숫자로 변환 / indexOf() )

hihiha2 2023. 6. 5. 14:18
반응형

프로그래머스 접두사인지 확인하기 JS

 

문제 설명

어떤 문자열에 대해서 접두사는 특정 인덱스까지의 문자열을 의미합니다. 예를 들어, "banana"의 모든 접두사는 "b", "ba", "ban", "bana", "banan", "banana"입니다.
문자열 my_string과 is_prefix가 주어질 때, is_prefix가 my_string의 접두사라면 1을, 아니면 0을 return 하는 solution 함수를 작성해 주세요.

 

 

✅ 내 코드

function solution(my_string, is_prefix) {
  if (my_string.startsWith(is_prefix)) {
    return 1;
  } else {
    return 0;
  }
}

 

 

 

🙋‍♀️ 내 생각

처음에 문제를 잘못읽어서 조금 헤맸다 ..ㅠㅠ

is_prefix는 이미 정해져있는 값이기때문에 따로 구하는 것이 아니었는데 그것부터 구하려고하다가 시간 많이 보냄 ㅋㅋ

하지만 다시 읽어보니 생각보다는 간단한 문제였다. 🥲

이 문제를 풀수있는 방법을 여러가지지만 indexOf()도 생각하긴했는데 그 방법은 아니고 검색을 통해서 startsWith()라는 메서드가 있다는 걸 알아서 그걸로 풀었다. startsWith()처음본거라 공부를 했다.

➡️ if문을 통해서 만약 is_prefix로 시작을 한다면 1을 리턴하고, 그렇지 않으면 0을 리턴해라.라는 코드를 만들었다.

 

 

 

 

💻 내가 사용한 메서드

startsWith(): 어떤 문자열이 특정 문자로 시작하는지 확인하여 결과를 true 혹은 false로 반환

String.startsWith()

 

startsWith(searchString)
startsWith(searchString, position)

인자가 2개가 들어가면 두번째 값은 position이다. 이렇게 위치를 지정해서 특정문자로 시작하는지를 검사할 수 있다.

 

 

 

💻  다른사람 코드중에 배울 것

function solution(my_string, is_prefix) {
  return +my_string.startsWith(is_prefix);
}

굳이 if문이나 삼항연산자를 쓰지 않고도 코드를 더 간단하게 표현하는 방법이 있어서 공부해보았다.

+ 연산자Boolean 값을 0 또는 1의 숫자로 강제 변환한다.

이렇게하면 코드를 조금 더 간단하게 짤수있겠다는 생각이 들었다.

 

 

 

 

💻  다른사람 코드중에 배울 것 2

const solution = (my_string, is_prefix) => +(my_string.indexOf(is_prefix) == 0);

처음에 생각했던 indexOf()를 이용해서 푼 코드이다.

 

 indexOf(): 호출한 String 객체에서 주어진 값과 일치하는 첫 번째 인덱스를 반환

여기에서 주어진 값과 일치하는 인덱스를 반환한다는 것이 중요한점인것같다.

처음에는 includes()도 생각했었는데, includes()는 안되고 indexOf()는 되는 이유가 바로 이 특징때문이다. includes는 처음이 아니라 중간에 위치한 값도 접두사처럼 인식을 해버리기때문이다.

indexOf()를 통해서 is_prefix가 my_string의 0번째 인덱스인지를 검사한다.

my_string.indexOf(is_prefix) == 0

위와 같이 is_prefix가 my_string의 0번째 인덱스라는 뜻이다.

(indexOf는 맨 처음의 하나의 인덱스만을 반환하기 때문에 뒤에 같은 값이 나올까하는 걱정은 안해도 된다)

 

이 값의 결과는 true, false의 Boolean값으로 나오기 때문에 위에 1번과 같이 +연산자를 이용해서 Boolean의 값을 숫자로 변환한다.

 

 

 

💻  다른사람 코드중에 배울 것 3

function solution(my_string, is_prefix) {
    return my_string.slice(0, is_prefix.length) === is_prefix ? 1 : 0
}

slice를 이용한 방법도 생각해봤어서 궁금해서 이 코드도 공부해보았다.

slice()를 이용해서 begin,end지점을 정해서 my_string을 자른 다음에 그 값이 is_prefix와 같은지 비교한다. 

(slice()는 end는 미포함하기 때문에 end를 is_prefix.length로 지정한다)

시작지점을 0부터로 만들었기 때문에 이 값은 접두사가 될것이다.

이렇게 접두사인 값이 is_prefix와 일치하면 1을 아니라면 0을 리턴한다.

 

 

 

 

💻 학습한것

1. startsWith(): 어떤 문자열이 특정 문자로 시작하는지 확인하여 결과를 true 혹은 false로 반환

반대의 역할을 하는 메서드도있을것같아서 찾아보니 endsWith()가 있었다.

   endsWith(): 어떤 문자열에서 특정 문자열로 끝나는지를 확인할 수 있으며, 그 결과를 true 혹은 false로 반환

 

2. + 연산자 Boolean 값을 0 또는 1의 숫자로 강제 변환

 

3. indexOf는 Array, String 모두 사용가능

 

 

반응형