본문 바로가기

코딩테스트

[프로그래머스] level1. 문자열 내 p와 y의 개수 (javascript)

반응형

문제

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

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

나의 코드

단순하게 전체를 소문자로 만들고, for문을 돌려서 p와y의 갯수를 카운트 했다.

function solution(s){
    let countP = 0;
    let countY = 0;
    const answer = s.toLowerCase()

    for ( let i =0 ; i < answer.length;i++){

        if(answer[i] ==='p'){
            countP++    
        }
        if(answer[i] ==='y'){
            countY++
        }

    }
    return (countP === countY) ? true : false

}

toLowerCase() 메서드는 호출 문자열을 소문자로 변환해 반환합니다.
toLowerCase() 는 원래의 str에 영향을 주지 않습니다.

다른이들의 정답

방법 1.

function solution(s){
    return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}

split를 활용한 방법

 

 

방법 2.

function numPY(s) {
  return s.match(/p/ig).length == s.match(/y/ig).length;
}

 

정규 표현식을 활용한 방법

 

정규식 참조 내용

g :Global 의 표현하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미한다.
i :Ignore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미한다.
m : Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미한다.

 

출처: https://hamait.tistory.com/342 [HAMA 블로그]

반응형