Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 배열에서 두 정수의 합이 특정 값과 일치하는지 확인하는 방법

배열에 저장된 여러 정수 중에서 두 정수의 합이 우리가 지정한 특정 값과 일치하는지 확인해야 하는 경우가 종종 있습니다. 이 글에서는 C#의 이중 반복문을 활용해 이 문제를 간단하게 해결하는 방법을 알아보겠습니다.

문제 상황

먼저 다음과 같은 정수 배열이 있다고 가정해 보겠습니다.

int[] arr = new int[] { 7, 4, 6, 2 };

그리고 찾고자 하는 목표 값(두 정수의 합과 일치해야 하는 값)은 다음과 같습니다.

int res = 8;

즉, 배열에 있는 두 요소를 더했을 때 그 결과가 8이 되는 조합이 존재하는지 확인하는 것이 목표입니다. 실제로 7 + ... 는 아니지만, 예를 들어 6 + 2 = 8처럼 배열 내 두 수의 합이 목표 값과 같은지 검사할 수 있습니다.

핵심 로직: 이중 반복문 활용

가장 직관적인 방법은 배열의 모든 요소 쌍을 비교하는 것입니다. 바깥쪽 반복문과 안쪽 반복문을 사용해 서로 다른 인덱스의 두 요소를 더한 뒤, 그 합이 목표 값과 일치하는지 확인합니다.

for (int i = 0; i < arr.Length; i++) {
    for (int j = 0; j < arr.Length; j++) {
        if (i != j) {
            int sum = arr[i] + arr[j];
            if (sum == res) {
                Console.WriteLine(arr[i]);
            }
        }
    }
}

여기서 i != j 조건이 중요합니다. 같은 요소를 자기 자신과 더하는 것을 방지하기 위해서입니다. 예를 들어 인덱스 i와 j가 동일하면 arr[i] + arr[i]가 되어 의도하지 않은 결과가 나올 수 있습니다.

전체 예제 코드

위 로직을 포함한 완전한 C# 프로그램은 다음과 같습니다.

using System;
using System.Collections.Generic;

namespace Demo {
    public class Program {
        public static void Main(string[] args) {
            int[] arr = new int[] {
                7,
                4,
                6,
                2
            };
            // 목표 정수
            int res = 8;
            Console.WriteLine("Given Integer {0}: ", res);
            Console.WriteLine("Sum of:");
            for (int i = 0; i < arr.Length; i++) {
                for (int j = 0; j < arr.Length; j++) {
                    if (i != j) {
                        int sum = arr[i] + arr[j];
                        if (sum == res) {
                            Console.WriteLine(arr[i]);
                        }
                   }
               }
            }
        }
    }
}

실행 결과

프로그램을 실행하면 합이 8이 되는 숫자들이 출력됩니다. 배열에서 6 + 2 = 8 조합이 존재하므로 해당 숫자들이 화면에 표시됩니다.

Given Integer 8:
Sum of:
6
2

정리 및 개선 아이디어

이 방법은 구현이 매우 간단하지만, 이중 반복문 때문에 시간 복잡도가 O(n²)입니다. 배열의 크기가 커지면 성능이 저하될 수 있으므로, 다음과 같은 최적화 방법도 고려해 볼 수 있습니다.

  • HashSet 활용: 배열을 한 번만 순회하면서 각 요소에 대해 '목표 값 - 현재 요소'가 이미 집합에 있는지 확인하면 O(n) 시간 복잡도로 해결할 수 있습니다.
  • j를 i+1부터 시작: 안쪽 반복문을 for (int j = i + 1; ...)로 시작하면 중복된 쌍 검사를 피하고 불필요한 연산을 줄일 수 있습니다.

작은 배열에서는 단순한 이중 반복문 방식이 충분히 효율적이며, 코드 가독성 면에서도 이해하기 쉬운 장점이 있습니다.