본문 바로가기
Coding Test/JavaScript

[Javascript] (백준 11170) 0의 개수

by Chaedie 2022. 7. 9.
728x90

[Javascript] (백준 11170) 0의 개수

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

//* 인풋 (디폴트)
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = require('fs').readFileSync(filePath).toString().trim().split('\n');
//* 인풋 (커스텀)
const n = +input[0];
let answer = [];
for (let i = 0; i < n; i++) {
  const nums = input[i + 1].split(' ').map((x) => +x);
  answer.push(solution(nums));
}
console.log(answer.join('\n'));

//* 로직함수
function solution(nums) {
  let count = 0;
  for (let i = nums[0]; i <= nums[1]; i++) {
    let str = i + '';
    for (let j = 0; j < str.length; j++) {
      if (str[j] === '0') {
        count++;
      }
    }
  }

  return count;
}
  • 시작 숫자부터 끝 숫자까지 for문 돌면서
  • 해당 숫자에 ‘0’ 이 포함되는지 count++ 했습니다.

배운 점, 느낀 점

  • String.match(/0/g)로 했었다가 0이 없어서 null이 나오면 .length 했을 때 에러가 뜨더라구요.
  • 근데 다른 사람 풀이를 보니까 “옵셔널 체이닝” ?. 을 사용해서 match를 사용했더라.
  • 옵셔널 체이닝 ?.을 사용하면 에러 없이 undefined를 반환해준다고 한다.

다시 풀기 with ?. (옵셔널 체이닝)

//* 로직함수
function solution(nums) {
  let count = 0;
  for (let i = nums[0]; i <= nums[1]; i++) {
    let str = i + '';
        //!!! 바뀐 부분
        // for문 하나를 날리고 
        // ?.length를 통해 0이 없으면 undefined가 뜨게 했다. 
        // undefinde가 뜰 때 (undefinde || 0) 을 통해 0으로 처리했다.
    count += str.match(/0/g)?.length || 0;
  }

  return count;
}
  • 시작 숫자부터 끝 숫자까지 for문 돌면서
  • 해당 숫자에 ‘0’ 이 포함되는지 count++ 했습니다.

시간과 메모리는 for문 돌리는게 훨씬 이득이네요.

그래도 for문 중첩되는 것 보단 match써서 한 문장으로 표현하는게 더 보기 좋은것 같습니다.

댓글