leetcode(리트코드)1295-Find Numbers with Even Number of Digits
leetcode(리트코드)1295-Find Numbers with Even Number of Digits
leetcode Array intro - Find Numbers with Even Number of Digits 문제입니다.
1. 문제
https://leetcode.com/explore/learn/card/fun-with-arrays/521/introduction/3237/
2. Input , Output
3. 분류 및 난이도
leetcode의 Array introduction에 있는 문제입니다.
어렵지 않고, leetcode가 어떤 시스템인지 인지하기 위해 풀었습니다.
4. 문제 해석
- 배열을 돌면서 짝수크기인 배열요소를 찾아줍니다. 예를 들어 12는 크기가 2이므로 카운트를 세주고 7896도 크기가 4이므로 카운트를 세줍니다.
5. code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class Solution {
public:
int findNumbers(vector<int>& nums) {
//정렬
sort(nums.begin(),nums.end());
int count=0;
int division;
int temp=nums[0];
int init=0;
while(temp!=0)
{
temp/=10;
init++;
}
//맨처음 요소가 짝수이면 10, 1000,10000 등으로 맞추려고 함.
if(init%2==0)
--init;
division = pow(10,init);
for(size_t i=0;i<nums.size();)
{
//홀수라면 넘어감.
if(division > nums[i])
{
++i;
continue;
}
else
{
division*=10;
//짝수라면 그 범위내에서 카운트를 세줌. 10~99, 1000~9999 ...
while(i<nums.size() && nums[i]<division&&nums[i]>=division/10)
{
++count;
++i;
}
division*=10;
}
}
return count;
}
};
6. 결과 및 후기, 개선점
시간
참고로 시간은 제출할 때마다 다르다고 합니다.
이유 : https://leetcode.com/discuss/general-discussion/678668/why-does-the-runtime-change-every-time-the-code-is-submitted
요약 하자면 사람들이 동 시간대에 제출을 많이하면 할수록 런타임이 길어진다고 합니다.
알고리즘이 차이가 나지않는 이상 거의 변동이 없다고 합니다.
시간효율성이 좋은 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
typedef long long ll;
#define rep(i,s,n)for(ll i = s;i<n;i++)
///////////////////////////////////////////////////////////
class Solution {
public:
// 숫자의 자릿수를 세주는 함수.
int digits(int n) {
int d = 0;
while (n) {
n /= 10;
d++;
}
return d;
}
int findNumbers(vector<int>& n) {
int ans = 0;
rep(i, 0, n.size()) {
//숫자 자릿수가 짝수라면 ans에 더함.
ans += (digits(n[i]) % 2 == 0);
}
return ans;
}
};
공간 효율성이 좋은 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
int findNumbers(vector<int>& nums) {
int count = 0;
for(int i = 0;i<nums.size();i++)
{
//string으로 바꿔버림
string conv = to_string(nums[i]);
//string의 크기가 짝수이면 count를 더함.
if(conv.size() % 2 == 0)
{
count += 1;
}
}
return count;
}
};
스트링으로 바꾼다는 생각을 했는데.. 좀 더 생각할걸..
This post is licensed under CC BY 4.0 by the author.