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
|
//배열은 정렬 되어있어야한다.
//Comparer를 만족하는 개수 반환
public static int CalculateCountWithTwoPointer(int[] arr, System.Func<int, int, bool> comparer)
{
// 배열이 비어있거나 comparer가 null인 경우 0을 반환
if (arr == null || arr.Length == 0 || comparer == null)
{
return 0;
}
int count = 0; // 조건을 만족하는 원소 쌍의 개수를 저장할 변수
int left = 0; // 왼쪽 포인터
int right = 0; // 오른쪽 포인터
// 오른쪽 포인터가 배열의 끝에 도달할 때까지 반복
while (right < arr.Length)
{
// comparer가 true인 개수 세기..
if (comparer(arr[left], arr[right]))
{
count++;
right++; // 오른쪽 포인터를 이동
}
else
{
left++; // 조건을 만족하지 않으면 왼쪽 포인터를 이동
if (left > right)
{
right = left; // 왼쪽 포인터가 오른쪽 포인터보다 클 경우, 오른쪽 포인터를 왼쪽 포인터와 같게 설정
}
}
}
return count; // 조건을 만족하는 개수 반환
}
|
cs |
- 배열에서 인덱스 2개를 사용해야 할때 평범하게 for 문 2번으로 풀이하면 시간 초과가 발생하는 경우 생각해볼 수 있다.
- 인덱스 2개를 while 문 한번으로 사용하면서 문제를 해결할 수 있다.
- 구간 합도 공부하자.
'공부 > 알고리즘 및 기타 공부' 카테고리의 다른 글
2진수 ~ 16진수 변환 (C#) (0) | 2023.04.25 |
---|---|
이진탐색 (C#) 제네릭 (0) | 2023.04.24 |
우선순위 큐 (C#) (0) | 2023.04.22 |
이진탐색 (C#) (0) | 2022.02.07 |
이진트리 구현 (C#) (0) | 2022.02.03 |