머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.
제한사항
- 1 ≤ array의 길이 ≤ 100
- 0 ≤ array의 원소 ≤ 100,000
나의 풀이
function solution(array) {
let count = array.map((_, i) => {
let count = array[i].toString().match(/7/g);
return count == null ? 0 : count.length;
});
let result = count.reduce((acc, cur) => {
return acc += cur;
}, 0)
return +result;
}
이 문제를 푼 공을 Y언니에게 바칩니다,,,
- count 변수에 map()으로 돌린 array 배열을 새로 담아준다.
- map() 내부에서 array를 돌며 문자열로 변환한 후 match()메서드를 통해 7이 들어가 있는 요소를 골라낸다.
- 만일 count 가 null 일 경우 (7이 들어간 문자가 없을 경우) 0을 반환하고, 있을 경우 길이(length)를 반환한다.
- 내가 여기서... 7이 있을 경우 length를 반환해놓곤 없을 경우 빈 배열을 반환해서 50점 나왔었다. Y언니가 0으로 반환해야 하지 않냐고 말해줘서!! 낼름 성공
- count를 다시 reduce()를 해줘서 총 합산을 더해준다. 하지만 그냥 반환할 경우 문자열이 나가버리기 때문에... 숫자로 바꾼 후에 리턴한다.
다른 풀이 1
function solution(array) {
return array.join('').split('7').length-1;
}
아니 이렇게 간단한 풀이가...
- 배열을 전부 문자열로 합쳐준 후... split()함수를 사용해서 7을 기준으로 나눠준다.
- split은 기준 값을 만날 때마다 앞뒤를 잘라준다... split MDN 찾아보세요 값을 기준으로 양 옆을 나눠주기 때문에 본래의 값보다 요소가 하나 많아진다 그렇기 때문에 -1을 해주세요
- 무슨 말인지 이해가 안 가신다면 .. . 하루 뒤에 다시 보자 (SH님 설명해주세요)
다른 풀이 2
function solution(array) {
return(array.join().split("").filter((el)=>{return el=="7"}).length)
}
- join으로 합쳐준다 (하지만 문자열로 합칠 때 ''를 안 써주면 쉼표가 생겨벌임)
- 그리고 그걸 하나씩 배열로 쪼갠다
- 그리고 filter 함수를 써서 '7'만 뽑아주고 그 길이를 반환한다.