[Array & Hash] Two Sum

김예인·2023년 11월 14일
0

알고리즘 문제풀이

목록 보기
5/12

문제


정수 배열 nums 과 정수가 주어지면 두 숫자의 합이 target가 되는 인덱스를 반환합니다.
각 입력에는 정확히 하나의 솔루션이 있다고 가정하며 동일한 요소를 두 번 사용할 수 없습니다.
어떤 순서로든 답변을 반환할 수 있습니다.


Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:

Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:

Input: nums = [3,3], target = 6
Output: [0,1]


나의 풀이

class Solution {
    public int[] twoSum(int[] nums, int target) {

        // 1. 배열을 순회하며 순서대로 합해본다.
        for (int i = 0; i < nums.length; i++) {
                for (int j = i + 1; j < nums.length; j++) {
                    // 2. 합이 target 과 같으면
                    if (nums[i] + nums[j] == target) {
                        // 3. 해당 인덱스 배열을 반환한다.
                        return new int[] {i, j};
                    }
                }
            }
            return null;
    }
}
  • Java에서 배열을 반환할 때는 new 키워드를 사용하여 배열을 생성
  • 시간복잡도 : O(N^2)

다른 풀이

  • HashMap 을 사용하여 배열의 각 요소를 한 번만 순회하면서, 각 숫자와 그 인덱스를 매핑할 수 있음
  • 시간복잡도 : O(N)
public int[] twoSum2(int[] nums, int target) {
            // 1. 해시맵 생성
            Map<Integer, Integer> numMap = new HashMap<>();

            // 2. 배열을 순회하며 [i 인덱스의 요소, i] 쌍을 해시맵에 저장
            for (int i = 0; i<nums.length; i++) {
                // 3. target 이 되기 위해 필요한 숫자가 해시맵에 있다면
                if (numMap.containsKey(target - nums[i])) {
                    // 4. [그 숫자가 있는 위치, i] 반환
                    return new int[] {numMap.get(target - nums[i]), i};
                }
                numMap.put(nums[i], i);
            }
            return null;
        }
profile
백엔드 개발자 김예인입니다.

0개의 댓글