대문자와 소문자가 섞여있는 문자열 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 |
1. 문자열을 모두 소문자로 변경하자
2. 'p'와'y'를 찾자
3. 비교 하기
toUpperCase()
, toLowerCase()
console.log('TO_LOWER_CASE'.toLowerCase()) //to_lower_case
console.log('to_upper_case'.toUpperCase()) //TO_UPPER_CASE
대소문자는 간단하게 변경이 가능했다.
문자열 동일한 단어를 찾아내기 위한 매서드를 검색했을 때, 찾았던 키워드는 Match()
함수 였다.
match() 함수는 특정 텍스트 안에 찾고 싶은 단어가 있는 경우 해당 텍스트가 문구에 포함되어 있는지 확인할 수 있습니다.
다만, 찾고 싶은 단어중 첫번째로 찾아지는 것만 찾기 때문에 이 문제를 풀기 위해서는 정규식이 필요 했다.
console.log('ppPPyy'.match('p')) // [ 'p', index: 0, input: 'ppPPyy', groups: undefined ]
찾고싶은 단어
/g찾고싶은 단어
를 다 찾아준다.// '/찾을 단어/g'
console.log('ppPPyy'.match(/p/g)) // [ 'p', 'p' ]
console.log('ppPPyy'.match(/pp/g)) // [ 'pp' ]
// '/찾을 단어/gi'
console.log('ppPPyy'.match(/p/gi)) // [ 'p', 'p', 'P', 'P' ]
console.log('ppPPyy'.match(/pp/gi)) // [ 'pp', 'PP' ]
그래서 대소문자를 바꿔주는 매서드를 없애고 정규식을 사용했다.
function solution(s){
var answer = true;
var p = s.match(/p/gi);
var y = s.match(/y/gi);
//'p'와 'y' 둘다 없는 경우(null인 경우)
if(p === null && y === null){
answer = answer
//이렇게 했다가. p,y 둘중 하나가 없는 문자열에서 에러를 발생했음!
// }else if ( p.length !== y.length){
} else if ( p === null || y === null || p.length !== y.length){
answer = false
}else if(p.length === y.length){
answer = true
}
return answer;
}