[프로그래머스] Lv.0 - 7의 개수

·2023년 3월 26일
0

Programmers

목록 보기
7/30
post-thumbnail

✨ 문제설명

머쓱이는 행운의 숫자 7을 가장 좋아합니다. 정수 배열 array가 매개변수로 주어질 때, 7이 총 몇 개 있는지 return 하도록 solution 함수를 완성해보세요.

🔥 제한사항

  • 1 ≤ array의 길이 ≤ 100
  • 0 ≤ array의 원소 ≤ 100,000

입출력 예


🌟 풀이

✅ 내 풀이

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) 문제에 비해 코드가 간결하지 못한 것 같다는 생각에 조금 비효율적이라고 느꼈다.


✅ 다른 사람 풀이 1

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

✅ 다른 사람 풀이 2

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

✅ 다른 사람 풀이 3

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
profile
🎨

0개의 댓글