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<intintbool> 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

+ Recent posts