코딩기록

string) 7의 개수 / 배열에 특정 문자 개수 세기(카운트), for...of문안에서 문자열만들기-for (const c of nums.join('')) 본문

프론트/JS)코딩테스트

string) 7의 개수 / 배열에 특정 문자 개수 세기(카운트), for...of문안에서 문자열만들기-for (const c of nums.join(''))

뽀짝코딩 2024. 9. 23. 18:02
728x90

 

문제 설명

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


제한사항

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

입출력 예

nums result

[7, 77, 17] 4
[10, 29] 0

입출력 예 설명

입출력 예 #1

  • [7, 77, 17]에는 7이 4개 있으므로 4를 return 합니다.

입출력 예 #2

  • [10, 29]에는 7이 없으므로 0을 return 합니다.
/**
 * @param {number[]} nums
 * @return {number}
 */
const solution = nums => {
  // do something
};

console.log(solution([7, 77, 17])); // 4
console.log(solution([10, 29])); // 0

 

 


 

풀이

1번 풀이 filter, .length(인덱스 길이) 

  1.  배열 내 정수를 일의자리로 하나씩 문자로 바꾸고
  2.  문자7과 같은것의 길이를 구한다.  길이는 곧 개수, 카운트를 의미함.
/**
 * @param {number[]} nums
 * @return {number}
 */
const solution = nums => {
  const splitNums = nums.join('').split('');
  return splitNums.filter(num => num === '7').length;
};


console.log(solution([7, 77, 17])); // 4
console.log(solution([10, 29])); // 0

 

위 코드를 더 간결하게 하면 아래와 같다. 

스프레드 문법을 쓰고 배열안에 .join('') 메서드를 썼다.

이렇게 스프레드 문법과 함께 join( )을 사용할 수 있다는걸 이번에 알았다.

const solution = nums => {
  return [...nums.join('')].filter(num => num === '7').length;
};

console.log(solution([7, 77, 17])); // 4
console.log(solution([10, 29])); // 0

 

 

 

2번 풀이 for...of, += 총합 

  1. 배열을 문자열로 변경하고 
  2. for...of로 문자열을 돌면서 인덱스 하나하나를 '7' 과 비교해
  3. '7'일때 cnt를 1씩 증가 시킨다. 
    • cnt++ 과 cnt += 1 은 같은 의미.

 

for of문 안에 .join('')을 써서 배열을 문자열을 만들어 돌렸다.

const solution = nums => {
  let cnt = 0;
  for (let c of nums.join('')) {
    if (c === '7') cnt++;   // cnt += 1; // 같은 의미
  }
  return cnt;
};


console.log(solution([7, 77, 17])); // 4
console.log(solution([10, 29])); // 0

 

 

위 코드를 생각하기 어려웠던 점이 보통은 배열을 문자열로 먼저 변경하고 나서 for...of문을 돌린다. 

const solution = nums => {
 const str = [...nums].join('');
  let cnt = 0;
     for (let c of nums) { 
       if (c === '7') cnt++;    
    } 
     return cnt; 
   };
};

console.log(solution([7, 77, 17])); // 4
console.log(solution([10, 29])); // 0

 

이렇게.

생각하지 못했던 방식이라 새로웠다. 쳇지피티 만세다.

 

 

 

2번 풀이

 정규표현식을 이용하면 String문제는 더 쉽게 풀린다

const solution = nums => {
  return nums.join('').match(/7/g)?.length || 0;
}
console.log(solution([7, 77, 17])); // 4
console.log(solution([10, 29])); // 0

 

 

 

 

 

 

 

 

참고

나, 쳇지피티

 

반응형
Comments