Given an array nums of integers, return how many of them contain an even number of digits.
정수가 담겨있는 배열이 주어지고, 짝수 자릿수가 몇 개인지 리턴하세요.
Example 1:
Input: nums = [12,345,2,6,7896]
Output: 2
Explanation:
12 contains 2 digits (even number of digits).
345 contains 3 digits (odd number of digits).
2 contains 1 digit (odd number of digits).
6 contains 1 digit (odd number of digits).
7896 contains 4 digits (even number of digits).
Therefore only 12 and 7896 contain an even number of digits.
Example 2:
Input: nums = [555,901,482,1771]
Output: 1
Explanation:
Only 1771 contains an even number of digits.
방법 1. number를 string으로 바꾸고 length로 자릿수를 구하기
var findNumbers = function(nums) {
let count = 0;
let devideNumber;
for (let i = 0; i < nums.length; i++) {
if (!(nums[i].toString().length % 2)) {
count++;
}
}
return count;
};
속도와 메모리가 별로 좋은 것 같지않아 힌트를 확인하니 Divide the number by 10 again and again to get the number of digits. 10으로 계속 나눠서 자릿수를 확인하라는 게 있었다.
5050 숫자의 자릿수를 구하기 위해 10으로 4번 나누게 되면 1보다 작거나 같은 숫자가 된다. 즉 나눈 횟수로 자릿수를 구할 수 있다.
10의 배수는 나머지가 없기 때문에 while문에서 1보다 크거나 같은지를 조건에 넣어주었다.
방법 2. 10으로 나눠서 자릿수 구하기
var findNumbers = function(nums) {
let count = 0;
let devideNumber;
let digitCount = 0;
for (let i = 0; i < nums.length; i++) {
devideNumber = nums[i];
devideNumber = devideNumber / 10;
digitCount++;
while (devideNumber >= 1) {
devideNumber = devideNumber / 10;
digitCount++;
}
if (!(digitCount % 2)) {
count++;
}
digitCount = 0;
}
return count;
};
https://shoark7.github.io/programming/algorithm/3-ways-to-get-length-of-natural-numberhttps://shoark7.github.io/programming/algorithm/3-ways-to-get-length-of-natural-number
이 글을 보니 log를 이용한 방법이라고 나와있는데 javascript에도 log가 있나 검색했더니 있었다!
Math.log10을 이용하면 위의 블로그 방법과 비슷하게 풀 수 있다.
var findNumbers = function(nums) {
let count = 0;
let devideNumber;
for (let i = 0; i < nums.length; i++) {
devideNumber = Math.floor(Math.log10(nums[i])) + 1;
if (!(devideNumber % 2)) {
count++;
}
}
return count;
};
'알고리즘, 자료구조' 카테고리의 다른 글
[알고리즘] Leetcode. Linked List Cycle 4개의 해결 방법 (0) | 2022.07.24 |
---|---|
[알고리즘] Leetcode. Design Linked List (0) | 2022.07.19 |
[알고리즘] Leetcode. Replace Elements with Greatest Element on Right Side (0) | 2022.05.27 |
[알고리즘] Leetcode 704. Binary Search 이진 검색 알고리즘 (0) | 2022.05.18 |
[알고리즘] random6 함수를 가지고 사칙연산만 사용해서 random12 함수 만들기 (0) | 2022.05.14 |