[프로그래머스] 문자열 내 p와 y의 개수 in JavaScript

hyocho·2022년 6월 23일
0

코딩테스트

목록 보기
23/45

✅문제

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

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

  • 제한사항
    문자열 s의 길이 : 50 이하의 자연수
    문자열 s는 알파벳으로만 이루어져 있습니다.

✍문제풀이

y,Y,p,P의 개수를 각각 구하여 합이 같을 때 true를, 아니면 false를 반환하는 함수를 작성하려고 했으나 실패했다..
다른 분의 코드를 보며 착안한 방식이 아래와 같은데, 메서드를 사용한 것이 아니라서 코드 보기에도 아주 쉽고 직관적인 느낌을 받았다.

function solution(s){
    var count_p = 0;
    var count_y = 0;

    for(var i=0; i<s.length; i++){
        if(s[i] === 'p' || s[i] === 'P'){
            count_p++;
        }
        if(s[i] === 'y' || s[i] === 'Y'){
            count_y++;
        }
    }
    return (count_p === count_y) ? true : false;
}

✔️참고할 좋은 코드

.toUpperCase() or .toLowerCase()를 사용하여 모두 대문자/소문자로 변환한 다음 생각해줄 수 있다.

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

구분자를 p로 하여 p조각을 내 준 길이 == 구분자를 y로 하여 y조각을 내 준 길이 이면 갯수가 같다는 의미

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

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

📝TIL

  • string.match("찾고싶은 특정 단어") : 문자열 안에 특정 단어를 찾고 싶을 때 사용하는 함수로서 특정 단어가 포함되어 있는지 여부를 알 수 있다. 나아가 특정 단어를 찾는 데 그치지 않고 정규식을 이용하여 특정 패턴을 찾는 것도 가능하다. 응용하여 match 함수 뒤에 length를 붙이면 특정 단어의 개수를 알 수 있다

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12916?language=javascript

profile
기록하는 습관을 기르고 있습니다.

0개의 댓글