뭘 풀지 모를때는 역시 daily 추천 문제를 푸는 것이 좋다
Difficulty: Medium
Submission: 177ms/ 6.1MB
여전히 효율이 좋은 코드를 생각하는 버릇이 안들었다. 일단 돌아가면 되지 라는 무지성 코딩 제발 그만해 이러다간 다 죽어
int numberOfArithmeticSlices(int* nums, int numsSize){
int result = 0;
int diff = 0;
int signal = 1;
// 3개부터 시작해서 몇개까지로 이루어진 sequence를 만들 수 있는지
for(int i = 3;i <= numsSize;i++)
{
// 그렇다면 i개의 subarray을 위해 몇번 돌아야 하는지
for(int j = 0;j < numsSize - i + 1;j++)
{
signal = 1;
diff = nums[j] - nums[j+1];
// subarray 안에서 몇번 돌아야 하는지
for(int k = j;k + i - 1 <= numsSize;k++)
{
// 다른 경우 signal을 0으로 하고 break
if (nums[k] - nums[k + 1] != diff)
{
signal = 0;
break;
}
}
// signal이 여전히 1인 경우 가능한 것이므로 결과값+=1
if (signal == 1)
result++;
}
}
return result;
}
반복문을 돌면서 배열을 점검하는 형태의 코드를 작성해보았다.
3개부터 가능한 수열로 확인하기 때문에 3부터 배열의 크기까지 확인을 해서 몇개까지로 이루어진 수열을 만들 수 있는지 확인한다.
그 후에는 3~numsSize 의 subArray는 각각 몇번의 배열을 돌면서 확인해야 하는지 또 반복문을 돌면서 확인한다.
이는 subArray의 시작 인덱스로도 활용 가능하다.
subArray에서는 이게 가능한 수열인지 확인해준다. 즉 diff 값과 다르다면 가능하지 않기 때문에 signal을 0으로 하고 탈출한다.
이 경우 signal이 0이라면 가능하지 않기 때문에 결과값을 증가시키지 않는다.
'ALGORITHM > c&c++ leetcode' 카테고리의 다른 글
[C/LeetCode] Search in Rotated Sorted Array II (0) | 2022.03.28 |
---|---|
[swift/LeetCode] Binary Search (0) | 2022.03.26 |
[c/LeetCode] Single Number (0) | 2022.02.15 |
[c/LeetCode] Median of Two Sorted Arrays (0) | 2022.02.12 |
[c && swift/LeetCode] Reverse Integer (0) | 2022.02.12 |