프로그래머스) 문자열 내 p와 y의 개수

minji jeon·2022년 7월 16일
0

알고리즘

목록 보기
3/29
post-thumbnail

문제

대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.

접근

오케이 문자의 개수를 찾아야 한다.
그래서 '자바스크립트 문자 개수구하기' 구글링을 좀 해봤다.
문자열을 찾을 수 있는 함수에는 match와, split이 있다고 해서
둘다 찾아봤으나 split은 이해가 안와서 가장
직관적으로 와닿는 match를 사용해 봤다.

내답

function solution(s){     pPooYy
    let word= s.toUpperCase() 
    let P = word.match(/P/ig)    //['P', 'P']
    let Y = word.match(/Y/ig)   //['Y', 'Y']
      return (P.length === Y.length ? true : false)   
    }

match() 메서드는 문자열이 정규식과 매치되는 부분을 검색한다.
정규식은 다양한 형태가 있지만 정규식 변환기를 이용하여 사용해 보았다.

다만, match함수도 대문자와 소문자 구별을 하기때문에
모든 문자를 대문자 혹은 소문자로 바꿔주어야 한다.
나는 toUpperCase()를 사용하여 대문자로 바꿔주었다.
소문자는 toLowerCase()로 사용할 수 있다.

match함수를 사용하게 되면 해당 문자를 배열로 반환해 준다.
['P', 'P'] 이렇게 출력된다.

그리고 마지막 배열로 반환된뒤 length를 사용하여 길이를 비교하였고,
삼항연산자를 사용하였다.

하지만
결과는...

런.타.임.에.러
몇몇 케이스에서 런타임에러가 나는데
정규식을 사용한 다른 답들도 넣어보니 모두 같은 케이스에서 에러가 나서 결국
split을 구글링했다...

  function solution(s){
        let word= s.toUpperCase() 
        let P = word.split("P")   // ['', '', 'OOOYY']   --> P를 기준으로 자름 
        let Y = word.split("Y")  //['PPOOO', '', '']
        
             return (P.length === Y.length)      
     ;
         ;
        }

우선 split도 대소문자를 구분하기 때문에 대문자로 정렬을 해준뒤,
split을 사용하는데 말그대로 쪼개는 함수이다.

split 함수는 괄호안에 있는 문자를 기준으로 문자열을 쪼개서 새로운 배열로 반환해준다.

예를 들어,split("p")는 p0p0py를 p를 기준으로 자른다.
p0p0py.split(”p”) —> ['', 'o', 'o', 'y]
출력된 문자가 이해가 가지않아서 곰곰히 찾아보니
인덱스를 나눠주는 컴마를(,) p라고 생각하면 쉽다.

결과적으로 p의 개수는 2개인데 배열은 결과적으로 3개의 값이 생긴다. 하지만 문제에서는 같은 수를 찾는 것이므로 배열의 인덱스는 중요하지 않다.

profile
은행을 뛰쳐나와 Deep Dive in javascript

0개의 댓글