Coding Test/프로그래머스 Lv.0

문자열 내 p와 y의 개수 (filter문, split으로 문자 나누기)

sangwoo_rhie 2023. 5. 26. 13:00

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

 

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

 

✔️어떤 문제가 있었는지
문제가 오류가 나왔다.

✔️내가 시도해본 것들

function solution (s){
    
    let arrayY = s.filter(function(item) {return item === 'y'|| item === 'Y' })
    let arrayP = s.filter(function(item) {return item === 'p'|| item === 'P' })
    if (arrayY.length === arrayP.length) {
        return true;
    } else {
        return false;
    }
}

 

여기서 arrayY는 문자열 내의 y,Y의 개수고, arrayP는 문자열 내의 p,P의 개수임.

✔️어떻게 해결 했는지

처음에 써야했던 것. 

1/ let arr = s.split("") 을 써야 했다. 예를들어 AbCdEfGh 이렇게 있으면 문자간에 구분이 없으므로 .split("")하면 문자 원소 하나하나가 구분됨. 그이후로는 s.filter가 아니라 arr.split으로 해야 함.

 

2. 아래 조건 을 안씀.

조건1 - 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다 

 

그런데 기존에 true가 나오는 조건,  'p'의 개수와 'y'의 개수를 비교해 같으면 True를 리턴합니다.

 

위 두개조건은 true를 return한다는 점에서 같으므로, 또는 (or  ||) 로 두 조건을 묶기.

대신, if ( (조건1) || (조건2) )   { } 이렇게 묶어야함. if문 첫번째 소괄호 안에 소괄호 두개



✔️새롭게 알게된 것

function solution (s) {
     let arr = s.split("")
    let arrayp = arr.filter(function(item){
return item === 'p' || item === 'P'
 })
    let arrayy = arr.filter(function(item){
return item === 'y'|| item === 'Y'
    })
    
   if(( arrayp.length === arrayy.length) || 
      (arrayp.length ==0 && arrayy.length ==0 )){
   return true
   }
    else {
return false
    }   
}