문자열에 특정 문자 개수 비교

배병일 ㅣ 2023. 5. 30. 13:51

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

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

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

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

 예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다.
제한 사항
  • 문자열 s의 길이 : 50 이하의 자연수
  • 문자열 s는 알파벳으로만 이루어져 있습니다

우선 혼자서는 풀 수 없어 해답 설명 영상을 보면서 따라 해보았고, 작성한 코드는 하단에 있는 코드이다.

function solution(s) {
    var answer = true

    s = s.toUpperCase()
    var num = 0
    for (var i = 0; i < s.length; i++) {
        if (s[i] === "P") {
            num++
        } 
        if (s[i] === "Y") {
            num--
        }
    }
    if ( num === 0) {
        answer = true
    }
    else {
        answer = false
    }
    return answer
}
var str1 = "ppooyy"
var str2 = "pyy"

console.log(solution(str2))

이 해답 코드는 소문자 대문자 구별을 하지 않기 위해 toUpperCase()를 이용해 전부 대문자로 바꿔주었다.

 

그리고 기본을 0 으로 잡고 문자열에 P가 있을 경우 + Y가 있을 경우- 를 해주어 true와 false를 나타내게 하였다.

 

영상을 보면서 하니 당연히 그렇구나 하고 이해가 되었다.

 

근데 궁금한게 하나 생겼다.. 변수를 선언 하기 위해 var를 써주었는데 내가 알고 있는 건 let, const, var 총 3가지이다!

 

저기에 var를 꼭 써야하는 이유가 있는 건가? 싶은 생각이 들어 let, const 를 각각 대입해보았따.

 

이때 let의 경우 문제없이 실행되었고 const의 경우 오류가 발생하였다.

 

이 경우 let,const, var 차이를 검색해 찾아보면 될 줄 알았는데 도통 무슨 말인지 이해를 못하겠다..

 

그리고 해답코드를 보면 왠지 엄청 길다는 느낌이 든다.. 단순히 문자열을 비교하는건데 이렇게 길 필요가 있을까라는 생각이 든다. 기본을 0으로 잡고 +,-를 해서 값을 나타내는 부분을 바꾸면 될 거 같다는 생각이 든다.

 

다음에 찾아보도록 하겠다..

'Algorithm' 카테고리의 다른 글

나이 비교  (0) 2023.05.31
n번째 글자를 기준으로 오름차순 정렬!  (0) 2023.05.31
간단한 문제 풀어보기 ( 더 간단하게.. )  (0) 2023.05.30