문자열 s를 배열에 담아서 요소의 개수를 구하는 방법으로 코드를 짜려고 했다.
배열에서 특정 값 개수 구하는 방법은 약 3가지 정도로 정리해보았다.
가장 간단하게는 for문이었지만 reduce를 너무 쓰고 싶었지만 reduce라는 개념이 좀 어렵고 그래서 우선 filter를 사용해보았다.
대소문자를 구별하지 않아서 toLowerase() 사용해서 소문자로 모두 바꿔준 뒤에 비교하기로 했다.
저번에 split()와 join()을 배워 문자열을 배열의 각 요소로 넣어주는 split()를 사용했고, ""
를 써서 문자 하나하나를 배열에 담아주었다.
pPoooyY -> ["p","p","o","o","o","y","y"]
그리고 filter를 사용해서 p와 y의 개수를 구해서 서로 같을 때만 return을 해주었다!!
function solution(s){
const arr = s.toLowerCase().split("");
let elementP = arr.filter(element => 'p' === element).length;
let elementY = arr.filter(element => 'y' === element).length;
return elementP === elementY;
}
filter()와 reduce() 차이를 알아보니 filter는 조건에 맞는 요소를 걸러내는 데에 사용되고, reduce는 배열의 요소를 누적하거나 변형하여 단일 값을 반환하는 데에 사용된다고 한다.
고로 이 문제는 reduce가 더 적합해 보인다.
function solution(s) {
const arr = s.toLowerCase().split("");
const countP = arr.reduce((count, element) => (element === 'p' ? count + 1 : count), 0);
const countY = arr.reduce((count, element) => (element === 'y' ? count + 1 : count), 0);
return countP === countY;
}
reduce 메서드를 사용하여 arr배열의 각 요소를 순회한다. 초기값 count
를 0으로 설정하고, 각 요소 element가 'p'와 'y'인 경우 count를 1 증가시킨다.
countP와 countY가 같으면 true, 다르면 false 반환한다.
혼공스를 읽고, 정리한 개념을 사용한 첫 문제라서 신기하면서도 자신감이 생겼다. 앞으로도 열심히 블로그에 글도 올리고, 알고리즘 문제를 통해 내것으로 만들어야겠다. 화이링 🙋🏼♀️