머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.
function solution(array) {
let str = '';
let answer = 0;
for (const a of array) {
str = str.concat(a);
}
for (let i = 0; i < str.length; i++) {
if (str.substring(i, i + 1) === '7') {
answer++;
}
}
return answer;
}
배열에 있는 값을 연결해 하나의 문자열로 만든 후, 7의 개수를 세는 방법을 생각했다. 결과는 제대로 나왔으나, 내가 작성한 코드는 (1) 반복문을 두 번 돌리는 것, (2) 문제에 비해 코드가 간결하지 못한 것 같다는 생각에 조금 비효율적이라고 느꼈다.
function solution(array) {
return array.join('').split('7').length - 1;
}
📌 join()은 배열의 문자열을 구분자로 합칠 때 사용한다.
- solution([7, 77, 17])
array.join(''); // 77717 array.join('').split('7'); // ['', '', '', '1', ''] array.join('').split('7').length; // 5 array.join('').split('7').length - 1; // 4
- solution([10, 29])
array.join(''); // 1029 array.join('').split('7'); // ['1029'] array.join('').split('7').length; // 1 array.join('').split('7').length - 1; // 0
function solution(array) {
return array.toString().match(/[7]/g)?.length || 0;
}
📌 match()는 일치하는 문자열을 배열로 만들 수 있다.
📌 match() 이후에 ?를 넣은 이유: 7이 없는 경우 match() 까지만 실행한 결과가 null 이라서 length를 수행할 수 없어 오류가 난다. (아직 물음표의 정확한 의미는 모르겠다 🥲)
- solution([7, 77, 17])
array.toString(); // 7,77,17 array.toString().match(/[7]/g); // ['7', '7', '7', '7'] array.toString().match(/[7]/g)?.length; // 4
- solution([10, 29])
array.toString(); // 10,29 array.toString().match(/[7]/g); // null array.toString().match(/[7]/g)?.length; // undefined array.toString().match(/[7]/g)?.length || 0; // 0
function solution(array) {
let str = array.join('');
return str.length - str.replaceAll('7', '').length;
}
- solution([7, 77, 17])
let str = array.join(''); // 77717 str.length; // 5 str.replaceAll('7', ''); // 1 str.length - str.replaceAll('7', '').length; // 4
- solution([10, 29])
let str = array.join(''); // 1029 str.length; // 4 str.replaceAll('7', '').length; // 4 str.length - str.replaceAll('7', '').length; // 0