[풀이1]
function solution(s) {
const lowerCaseStr = s.toLowerCase();
const pCount = lowerCaseStr.split('p').length - 1;
const yCount = lowerCaseStr.split('y').length - 1;
return pCount === yCount;
}
toLowerCase
는 문자열을 소문자로 변환하는 메서드. 문자를 소문자로 전부 바꾸어 계산한다.
split()
메서드는 문자열을 지정한 구분자를 기준으로 나누고, 나눠진 결과를 배열로 반환한다. 예를 들어
const str = "apple";
const result = str.split('p');
console.log(result); // ["a", "", "le"]
p
를 기준으로 나누었으므로, 첫 번째 p
의 앞부분 a
, 두 p
사이의 공백인 ""
, 그리고 두 번째 p
이후의 부분인 le
로 나뉘어 ["a", "", "le"]
가 반환된다.
toLowerCase
로 소문자화한 문자열을 p
로 나눠준다. lowerCaseStr.split('p')
로 문자열을 모든 p
기준으로 나눈다. 만일 ppyyoo를 나누면, 문자열의 첫 p
앞에 아무 것도 없으므로 빈 문자열인 ""
, 두 번째 p
와 첫 번째 p
사이도 ""
, 그리고 마지막 p
이후의 나머지 문자열인 yyoo
로 나뉘어 ["", "", "yyoo"]
의 배열이 반환된다.
split('p')
로 나눠진 배열의 길이는, 문자열에 등장한 p
의 개수보다 1만큼 더 많다. 따라서 split('p').length - 1
을 해주어야 p
의 개수를 얻을 수 있다.
∴ 주어진 문자열에서 p
나 y
의 개수를 구할 수 있는 코드는 아래와 같다.
cosnt pCount = lowerCaseStr.slpit('p').length - 1;
// p 의 개수 구하기
const yCount = lowerCaseStr.split('y').length - 1;
// y 의 개수 구하기
이렇게 정확한 알파벳의 개수를 구해서 비교하면 끝!
생각해보면 -1
을 하나 안하나 어차피 개수 비교는 같은 숫자가 뜬다. 그리고 꼭 스트링을 따로 변환한 후에 비교하지 않아도 될 것 같은데 그러면 더 간단하게 코드를 짤 수 있다!
function solution(s) {
return s.toLowerCase().split('p').length === s.toLowerCase().split('y').length
}
이렇게 짜면 한 줄로 코드 완성!