163일차 - 문자열 내 p와 y의 개수(프로그래머스)

김민찬·2021년 10월 18일
0

취업으로의 여정

목록 보기
167/196

문자열 내 p와 y의 개수

정규표현식을 연습할겸 쉽게 풀고 넘어가려고 했지만, 생각보다 런타임 에러로 고전해서 정리하려고 블로그를 작성한다.

문제: 대소문자를 구분하지 않고 문자열 s에 'p'의 개수와 'y'의 개수를 비교해서 같거나 둘다 없으면 True, 다르면 False를 return 하는 solution을 완성하시오

입출력 예

sanswer
"pPoooyY"true
"Pyy"false

최초 풀이(오류)

function solution(s){
    // 만약 s가 'pPoooyY'이면
    const findP = s.match(/p/gi);
    // findP는 ['p', 'P']가 된다.
    const findY = s.match(/y/gi);
    // findY는 ['y', 'Y'] 이다.
    
    return findP.length === findY.length; 
}

위와같이 풀었는데 런타임 에러가 났다.
그 이유를 곰곰히 생각해 봤는데, 만약 s가 'abcd'같이 p나 y가 둘 중에서 하나라도 없으면 null이 나온다.
그러면 findPnull이 되는 것이다. null.length는 존재할 수 없으므로 런타임 에러가 나오는 것이다.

그래서 아래와 같이 삼항 연산자를 사용해서 둘 중 하나라도 null일 경우에 findPfindY를 비교한다.
만약 p와 y 둘다 없어서 둘다 null일 경우에도 true가 나와서 조건을 만족한다.

나의 풀이

function solution(s){
    const findP = s.match(/p/gi);
    const findY = s.match(/y/gi);
    
    return findP === null || findY === null ? findP === findY : findP.length === findY.length; 
}
profile
두려움 없이

0개의 댓글