📑 문제
int 배열의 nums와 target이 주어졌습니다. 배열의 두개의 원소를 더해서 target과 같아지는 배열의 인덱스를 구하세요.
📑 문제 접근 방식
HashTable을 이용하여 문제를 해결했습니다. 처음에는 배열을 돌며, target과 같아지는 두개의 배열 인덱스를 구할려고 했지만, HashMap을 이용해서 푸는 것이 시간복잡도가 훨씬 작아질 것같아서, HashMap을 이용하여 구현했습니다.
배열을 돌며, target - 배열의 원소 = remainNum이라는 변수를 두어, HashMap에 remainNum이 포함된다면, remainNum의 인덱스와 i ( 현재 인덱스 ) 를 정답 배열에 담아 반환합니다.
만약에, remainNum이 HashMap에 없다면, 인덱스와 해당 인덱스의 값을 HashMap에 저장합니다.
📑 Code
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> numsMap = new HashMap<>();
int[] answer = new int[2];
for(int i = 0 ; i < nums.length ; i++){
int remainNum = target - nums[i] ;
if(numsMap.containsKey(remainNum) ){
answer[0] = numsMap.get(remainNum);
answer[1] = i;
}
else
numsMap.put(nums[i], i);
}
return answer;
}
}