LeetCode in C# 1. Two Sum

2025. 3. 22. 22:40·알고리즘

 

문제 요약

정수 숫자들이 담긴 배열과 목표 값이 주어졌을 때, 두 수를 더해서 목표 값이 되는 인덱스의 배열을 반환해라.

ex) [2, 7, 11, 15] , target = 9 라면, 2와 7을 더했을 때 9가 되므로 반환 값은 [0,1]

 

문제 핵심 (주관적인 생각)

모든 경우의 수를 다 더하는 것이 가장 쉬운 해결책이겠지만, 시간 복잡도를 더 줄일 수 있는 효율적인 탐색 알고리즘을 구현해야하는 것이 핵심이다.

 

풀이 방법 (1차)

뇌가 굳어서 방법이 떠오르지 않아, 그냥 모든 경우의 수를 전부 더해서 해결했다.

반복문을 통해, 두 수의 더한 값이 target이 될 때까지 앞에 자리 숫자부터 맨 뒤 숫자까지 반복적으로 더했다.

 

시간 복잡도 : O(n^2)

풀이 시간 : 19분 13초

public class Solution {
    public int[] TwoSum(int[] nums, int target) {
        
        //모든 경우의 수를 전부 계산해서 해결함.
        //최대값이 넘어가면 안되니까 -1
        for(int i = 0; i < nums.Length -1; i++)
        {
            for(int j = i + 1; j < nums.Length; j++)
            {
                int sum = nums[i] + nums[j]; 

                if(sum == target)
                {
                    return new int[2]{i, j};
                }
            }
        }

        return new int[0];
    }
}

 

풀이 방법 (2차)

해시 테이블 구조를 활용할 줄 아는것이 문제의 핵심이였다. 해시 테이블 자료형을 사용하면, 모든 요소를 순환하지 않아도 원하는 값에 접근할 수 있으므로 이 문제와 적합한 자료형이었던 것이다.

 

숫자를 key로 인덱스를 value로 1대1로 저장하여 문제를 해결하면 쉽고 효율적으로 문제 풀이가 가능하다.

ex) [2,7,11,15] 라면, Key : 2 이고 value : 0 으로 매칭을 시켜놓으면, 숫자값을 입력하면 인덱스를 반환하는 구조가 완성된다.

 

시간복잡도 : O(n)

public class Solution {
    public int[] TwoSum(int[] nums, int target) {
        //해시 테이블을 활용한 풀이
        Dictionary<int, int> map = new Dictionary<int, int>();

        for(int i = 0; i< nums.Length; i++)
        {
            int complement = target - nums[i]; //찾아야하는 값
            if(map.ContainsKey(complement)) //찾는 값이 존재하는지
            {
                return new int[] {map[complement], i};
            }
            map[nums[i]] = i;
        }
        
        return new int[]{};
    }
}

 

해시 테이블 자료형을 그동안 많이 사용해왔지만, 이 문제에 적용해볼 생각은 전혀하지 못했다.

특히 complement를 이끌어내는 공식인 target - nums[i]를 활용해볼 생각 또한 하지 못했다.

 

조금 더 넓은 시야를 가져야한다는 교훈을 얻게 해준 문제였다.

'알고리즘' 카테고리의 다른 글

LeetCode in C# 3. Longest Substring Without Repeating Characters  (0) 2025.03.28
LeetCode in C# 2. Add Two Numbers  (0) 2025.03.23
알고리즘 공부에 대하여  (0) 2025.03.22
프로그래머스 [C#] 멀리뛰기  (0) 2024.11.04
프로그래머스 [C#] 귤 고르기  (0) 2024.11.01
'알고리즘' 카테고리의 다른 글
  • LeetCode in C# 3. Longest Substring Without Repeating Characters
  • LeetCode in C# 2. Add Two Numbers
  • 알고리즘 공부에 대하여
  • 프로그래머스 [C#] 멀리뛰기
하길
하길
게임 개발을 위한 나의 모든 지식의 총 집합체
  • 하길
    Until Dawn
    하길
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (143)
      • Unreal Engine 5 (0)
      • Unity (31)
        • 3D (5)
        • 2D (7)
      • C++ (13)
      • C# (11)
      • 알고리즘 (35)
      • TIL (22)
      • 기타 (1)
      • 대장간 (12)
      • 메모 (2)
      • 게임리뷰 (0)
      • 일상 (0)
        • 챌린지 (0)
      • Article (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
하길
LeetCode in C# 1. Two Sum
상단으로

티스토리툴바