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써서 한 문장으로 표현하는게 더 보기 좋은것 같습니다.
'Coding Test > JavaScript' 카테고리의 다른 글
[Javascript] (프로그래머스) 짝지어 제거하기 (level 2) (0) | 2022.09.28 |
---|---|
[Javascript] (프로그래머스) 최솟값 구하기 (level 2) (0) | 2022.09.27 |
코드카타 못 푼 문제 (재귀 함수) (최단 경로?) (0) | 2022.08.18 |
[Javascript] (프로그래머스 level 2) 피보나치 수 (0) | 2022.08.15 |
[Javascript] (백준 1969) DNA (0) | 2022.07.09 |
[Javascript] (프로그래머스 level 1) 약수의 개수와 덧셈 (0) | 2022.07.08 |
[Javascript] (프로그래머스 level 1) 로또의 최고 순위와 최저 순위 (0) | 2022.07.06 |
[Javascript] (프로그래머스 level 2) 기능 개발 (0) | 2022.07.02 |
댓글