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

문자열 내 p와 y의 개수 (문자열분할split문, filter문)

sangwoo_rhie 2023. 5. 23. 21:13

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

 

 

문자열 abcd를 한 글자 한 글자 분할 시 let arr = 매개변수.split("")

 

대문자와 소문자가 섞여있는 문자열 s가 주어집니다.

s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return라는 solution를 완성하세요.

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

단 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다.

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

 

<조건>

1.  대문자와 소문자가 섞여있는 문자열 s

2.  문자열 s에서  'p'의 개수와 'y'의 개수 비교
3.  p의 개수 = y의 개수 : return Ture
4.  p의 개수 != y의 개수 : return False
5.  Return True : 'p', 'y' 모두 하나도 없는 경우
6.  개수비교 : 대소문자 구분X
7.  제한사항1. s.length =< 50
8.  제한사항2. s는 알파벳

 

!= : 같지 않다.

= 는 대입해주는 의미. 같다는 뜻이 아니라 대입한다는 의미다. 
== 안에 있는게 똑같다. 3 == '3' (숫자열, 문자열 but 3)
=== 안에 있는것도 똑같고, 형태도 똑같다. 3 === 3 (숫자열, 숫자열)

 

 

예를들어

s가 "pPoooyY"면 true를 return하고  (p의 개수 2개 = y의 개수 2개이므로 true)

"Pyy"라면 false를 return한다. (p의 개수  !=  y의 개수이므로 false)

 

function solution (s) {
 s = 'pPoooyY'
array = ['p', 'P', 'o', 'o', 'o', 'y', 'Y']
p 와 P만 요소로 갖는 array를 만들어서 array.length를 출력한다.

 

function solution (s) {

 let arr = s.split("")

 

 
  let str6 = "apple, banana, kiwi";
  let result02 = str6.split(",");          -> split은 문자열 분할, 콤마를 기준으로 문자를 분할한다.
  console.log(result02);                        즉 ['apple', 'banana', 'kiwi']
 
    위에서 let arr = s.split("")  -> 쌍따옴표 안에 아무것도 없으면 그냥 문자 하나하나를 분할한다.
 

 - 03(데이터타입 문자).js 참고 (문자열 분할 split)

- 17(배열2).js 참고. 필터링된 값을 추출하는 filter 메소드.

- 06(연산자).js 참고. (논리합 연산자 (||) : 두 값중 하나라도 true인 경우 true 반환)

 

문자열에서의 소문자p와 대문자P를 포함하는 문자열 arrayP

 

let arrayP = s.filter(funtion(item)) {
return item === 'p' || item === 'P'

}

 

문자열에서의 소문자y와 대문자Y를 포함하는 문자열 arrayY

 

let arrayY = s.filter(funtion(item)) {
return item === 'y' || item === 'Y'

}

 

 

위의 <조건>에서

True를 return해야 하는 경우

1. p의 개수 = y의 개수인 경우

2. 문자열에 'p', 'y' 모두 하나도 없는 경우

 

-> 조건이 두개이므로, if ((조건1) || (조건2))로 묶는다.

 

False를 return해야 하는 경우

1. p의 개수 != y의 개수 인 경우

 

근데, p의 개수 = y의 개수인 경우가 아닌 경우는 p의 개수 != y의 개수 인 경우이므로

else if문을 써서 False를 return해야 하는 조건을 따로 쓸 필요 없이 아래처럼 바로 else문을 써도 된다.

 

if ((true조건1) || (true조건2)) {

 return true
} else {

 return false

}

 

1. p의 개수 = y의 개수인 경우 ( arrayp.length === array.length)

2. 문자열에 'p', 'y' 모두 하나도 없는 경우 (arrayp.length ==0 && arrayy.length ==0)

 

따라서 답은 아래와 같다.

 

 
   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
       }
   }
 
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
    }   
}