LeetCode 문제 풀이
[LeetCode] 413번 문제를 풀어보았다. (ft. java)
pantrom
2022. 3. 3. 23:28
2022년 03월 03일 목요일 - 오늘은 블랙잭으로 칩 벌어서 적립하고 옴!
오늘 올려볼 문제는 413번 Arithmetic Slices 이라는 문제이다.
사진을 클릭하면 해당 문제로 이동합니다.
오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.
아니 차이라고만 하면 당연히 절대값으로 생각하지 왜 이거 때문에 틀리게하냐구!!
입력
사진에서도 볼 수 있듯이 int 배열 하나가 입력으로 들어온다.
풀이 및 코드
원소가 3개 이상이면서 붙어있는 원소 2개의 차이가 모두 같은 subarray의 개수를 찾아 리턴하는 문제다.
오늘은 처음부터 정답을 생각해냈다.
그냥 쭉 가면서 차이를 비교하고 3개 이상이면 나올 수 있는 subarray 개수를 더해주는 식으로 구현했다.
이제 코드를 봐보자!
풀이코드
class Solution {
public int numberOfArithmeticSlices(int[] nums) {
if(nums.length < 3)
return 0;
int result = 0;
int first = 0, last = -1;
int diff = nums[0] - nums[1];
for(int i = 1; i < nums.length - 1; i++)
{
if(nums[i] - nums[i + 1] != diff)
{
if(last - first + 1 >= 3)
{
result += calc(last - first + 1);
}
first = i;
last = i + 1;
diff = nums[i] - nums[i + 1];
}
else
{
last = i + 1;
}
}
if(last - first + 1 >= 3)
{
result += calc(last - first + 1);
}
return result;
}
public int calc(int num)
{
int result = 0;
for(int i = 3; i <= num; i++)
{
result += num + 1 - i;
}
return result;
}
}
제출 화면
오늘 문제가 좀 중의적이라서 좀 시행착오를 겪었다.
풀고나서 좀 화가났지만 그래도 뭐 내일 문제는 좋을 것이라 생각하면서 넘어갔다.
내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.