본문 바로가기
알고리즘 스터디/프로그래머스 스킬체크 레벨 1(끝)

[프로그래머스 스킬체크 레벨 1] 문자열 내 p와 y의 개수 풀이 및 설명 - 자바스크립트[JavaScript]

by 레일라오리덕 2021. 7. 14.
728x90

https://programmers.co.kr/learn/courses/30/lessons/12916

 

코딩테스트 연습 - 문자열 내 p와 y의 개수

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

programmers.co.kr

 

문제

 

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

 

 

제한 사항

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

결괏값 예시

 

s answer
"pPoooyY" true
"Pyy" false

 

기본 제공 틀

 

function solution(s){
    var answer = true;

    // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
    console.log('Hello Javascript')

    return answer;
}

 

풀이 [JavaScript]

 

 

728x90

처음 로직을 짰을 때에는 match함수를 이용하여 들어온 문자열 s에 정규식을 사용하여 대소문자 상관없이 p와 y가 있는 는 array 를 생성하고 만약  둘다 null값이 아니라면 둘의 길이를 비교하여 갯수가 같으면 answer에 true를 대입해주고 둘의 값 중 하나라도 null값이 있다면 값을 false로 대입해주었다.

그리고 기본 값은 true로 설정해주었는데, 둘다 없는 경우에는 무조건 true이기 때문에 디폴트 값을 true로 설정하였다.

function solution(s){
    var answer =  true;
    var pArray =  s.match(/p/gi);;
    var yArray = s.match(/y/gi);
    if(pArray !== null && yArray !== null){
        answer = pArray.length === yArray.length;
    }else if(pArray === null || yArray === null){
        answer = false;
    }
    return answer;
}

이후에 새로 짠 방법이다.

우선 들어온 문자열을 모두 소문자로 바꾸어 주고, split함수를 사용하여 p와 y를 기준으로 split을 해주면, 해당 문자열에 p와 y의 갯수만큼 문자열이 나뉘게되므로, 둘의 값이 같을 경우에는 true를 반환해주는 방식으로 로직을 구현하였다.

function solution(s){
    var lowerS = s.toLowerCase();
    return lowerS.split('p').length === lowerS.split('y').length;
}

 

채점 결과 [JavaScript]

 

 

 

 

728x90

댓글