안녕하세요, GameLabMaster입니다! 오늘의 코딩 테스트 대비 포스팅에서는 투 포인터 알고리즘(Two Pointer Algorithm)에 대해 알아보겠습니다. 투 포인터 알고리즘은 배열에서 연속된 부분 배열을 탐색하는데 사용되며, 시간 복잡도와 공간 복잡도를 줄이는 데 도움이 됩니다.
문제
주어진 정수 배열에서, 합이 특정 값인 연속된 부분 배열을 찾으세요.
풀이
투 포인터 알고리즘을 사용하면 이 문제를 효율적으로 해결할 수 있습니다. 먼저, 배열의 시작점을 가리키는 start 포인터와 끝점을 가리키는 end 포인터를 설정합니다. 그 다음, 현재 부분 배열의 합이 주어진 값과 같으면 결과를 반환하고, 현재 부분 배열의 합이 주어진 값보다 작으면 end 포인터를 증가시키며, 현재 부분 배열의 합이 주어진 값보다 크면 start 포인터를 증가시킵니다. 이 과정을 반복하면 원하는 부분 배열을 찾을 수 있습니다.
다음은 이 문제를 해결하는 C# 코드입니다.
public static int[] FindSubarrayWithSum(int[] arr, int targetSum) {
int start = 0;
int end = 0;
int currentSum = 0;
while (end < arr.Length) {
if (currentSum == targetSum) {
return arr[start..end];
} else if (currentSum < targetSum) {
currentSum += arr[end];
end++;
} else {
currentSum -= arr[start];
start++;
}
}
return new int[0]; // No subarray found
}
이제 주어진 배열과 합을 가지고 함수를 호출해보겠습니다.
public static void Main(string[] args) {
int[] arr = { 1, 3, 2, 5, 6, 1, 4, 8 };
int targetSum = 10;
int[] subarray = FindSubarrayWithSum(arr, targetSum);
Console.WriteLine($"Subarray with sum {targetSum}: [{string.Join(", ", subarray)}]");
}
이 예제에서는 주어진 배열과 합을 가지고 함수를 호출해봤습니다.
public static void Main(string[] args) {
int[] arr = { 1, 3, 2, 5, 6, 1, 4, 8 };
int targetSum = 10;
int[] subarray = FindSubarrayWithSum(arr, targetSum);
Console.WriteLine($"Subarray with sum {targetSum}: [{string.Join(", ", subarray)}]");
}
이 예제에서는 주어진 배열에서 합이 10인 연속된 부분 배열을 찾으려 합니다. 함수를 호출하면 결과로 [2, 5, 3] 또는 [5, 1, 4]와 같은 부분 배열이 반환됩니다.
이상으로 오늘의 코딩 테스트 대비 포스팅을 마치겠습니다. 투 포인터 알고리즘은 주로 연속된 부분 배열을 찾는 문제에서 활용되며, 시간 복잡도와 공간 복잡도를 줄이는 데 도움이 됩니다. 다음 포스팅에서는 더 다양한 문제와 알고리즘에 대해 알아보겠습니다. 감사합니다!
'Coding Test' 카테고리의 다른 글
코딩 테스트 대비: '네트워크 연결' 문제 풀이 - Kruskal 알고리즘 적용 (C#) (1) | 2023.04.28 |
---|---|
코딩 테스트 대비: 그래프 이론 기초 이해 및 적용 (C#) (0) | 2023.04.28 |
코딩 테스트 대비: 이진 탐색 트리를 이용한 데이터 검색 및 삽입 (C#) (0) | 2023.04.26 |
코딩 테스트 대비: 다익스트라 알고리즘을 이용한 최단 경로 찾기 (C#) (0) | 2023.04.25 |
코딩 테스트 대비: 백트래킹으로 N-Queens 문제 해결하기(C#) (0) | 2023.04.22 |