본문 바로가기
기타/알고리즘

(JS) match() [Programmers - 문자열 내 p와 y의 개수]

by 가나닩 2024. 10. 6.

문제를 풀기위해 아래와 같은 요소들을 고려하였다.

  1. 문자열을 split을 이용해 분리하여 p와 y를 검출한다.
  2. p와 y변수를 두고 개수만큼 값을 상승시켰다. 코드를 줄여보기 위해 return문에 삼항연산자를 이용해보았다.
더보기
function solution(s){
    let arr = s.split("");
    let p=0, y=0;
    arr.forEach((val, idx) => {
        if(val === "p" || val === "P") p++;
        if(val === "y" || val === "Y") y++;
    })
    return p===y ? true : false;
}

 

 

• match

문자열에서 특정 문자를 찾을때 사용할 수 있는데 정규표현식을 사용한다는 특징이 있다.

 

예를들어 문제에서 사용할 수 있는 방식으로는 아래와 같다.

function solution(s){
    let result = s.match(/p/ig); // [ 'p', 'P', 'P', 'p' ]
}

solution("pPtciPip")

 

주어진 문자열에서 p를 찾아냈다. 이 코드에서 사용된 정규표현식을 정리해보면 다음과 같다.

  • /p/ : 슬래시 사이의 문자를 매칭한다. 여기서는 p를 찾는 역할을 한다.
    ※ 뒤에 플래그 g가 없으면 단일일치찾기를 시행한다. 이 경우 가장 앞에 있는 일치문자를 찾아낸 뒤 해당 문자의 인덱스, 입력된 문자열 정보등이 반환된 배열에 포함된다.
  • 플래그 i : 대소문자를 무시한다.
  • 플래그 g : 모든 일치를 찾는다. 이 경우 모든 문자를 찾아 배열로 반환하지만 단일일치찾기에 있던 추가 정보는 포함되지 않는다.

이 외에도 여러가지 정규표현식 사용 방법이 있다. 이를 활용하면 match를 통해 빠르게 일치문자를 찾아낼 수 있다.

 

 

 

 

※ 다른 사람의 풀이 참고

다른 사람의 풀이를 보면서 같은 문제를 다양하게 접근할 수 있다는것을 알 수 있었다. 코드 가독성, 실제 실행 속도 등을 고려하면 가장 좋은방법은 아닐 수 있겠지만 여러가지 활용방법을 유연하게 사용할 수 있는 능력을 기를 필요도 있을 것 같다.

• toUpperCase, toLowerCase를 활용

match를 활용하지 않고 문자를 직접 탐색할수도 있는데 이때 미리 문자열을 대문자 혹은 소문자로 변환해두면 대/소문자를 모두 탐색할 필요가 없어 코드를 간소화할 수 있다.

 

 split을 활용

대문자 혹은 소문자로 변경된 문자열을 split("P") 등 찾는 알파벳을 이용해 문자열을 나누어 배열로 변환하면 찾는 문자를 제외한 나머지 문자들만 배열로 변환된다. 찾는 문자의 길이가 같은지를 파악할때 유용하게 사용할 수 있다.