알고리즘_문자열 내 p와 y의 개수

정재연·2022년 1월 17일
0

알고리즘

목록 보기
4/23

문자열 내 p와 y의 개수

1. 문제 설명

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

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

2. 제한사항

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

3. 입출력 예

sanswer
"pPoooyY"true
"Pyy"false

4. 나의 문제 풀이

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() 함수는 특정 텍스트 안에 찾고 싶은 단어가 있는 경우 해당 텍스트가 문구에 포함되어 있는지 확인할 수 있습니다.
다만, 찾고 싶은 단어중 첫번째로 찾아지는 것만 찾기 때문에 이 문제를 풀기 위해서는 정규식이 필요 했다.

  • 예시) match()
console.log('ppPPyy'.match('p'))	// [ 'p', index: 0, input: 'ppPPyy', groups: undefined ]
  • 예시) 정규식
    정규식 사용 /찾고싶은 단어/g
    //g g는 모든 찾고싶은 단어를 다 찾아준다.
    //gi gi는 영문같은 경우는 대소문자 다 찾아준다고 한다.
// '/찾을 단어/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;
}

*참고 링크
Match()
정규식

profile
코린이 개발자 :)

0개의 댓글