
주어진 정수 배열 nums와 정수 target이 주어졌을 때, 두 숫자를 더해서 target이 되는 인덱스를 반환하십시오.
각 입력이 정확히 하나의 해결책을 가지고 있다고 가정할 수 있으며, 동일한 요소를 두 번 사용할 수 없습니다.
어떤 순서로든 답을 반환할 수 있습니다.

이중 반복문을 사용하여 모든 가능한 경우를 확인하는 브루트 포스 방법을 사용하여 해결하였습니다.
i= 0) 끝까지(nums.length) 조회하는 반복문을 만들고, 첫 번째 반복문의 index부터(i) 끝까지(nums.length) 조회하는 반복문을 하나 더 만들어 모든 경우의 수를 비교하도록 코드를 작성하였습니다.target과 같은 연산값을 찾으면 결과값을 반환하는 배열에 해당 index i, j를 저장하여 반환합니다.//Brute Force
import java.util.Hashtable;
class Solution {
public int[] twoSum(int[] nums, int target) {
int len = nums.length; // nums의 길이
int[] re = new int[2]; // 결과값으로 반환할 배열
Loop1 :
for(int i = 0; i < len; i++){
for (int j = i + 1; j < len; j++) {
if(nums[i] + nums[j] == target){
re[0] = i;
re[1] = j;
break Loop1;
}
}
}
return re;
}
}
HashMap 을 사용하여 메모리를 조금 더 사용하지만 시간복잡도를 O(N)으로 줄일 수 있는 코드로 개선해 보았습니다.Key : Vaule 를 nums[i] : i값으로 저장하면서 target - nums[i] 연산값이 존재하는지 조건 처리를 합니다.// Hash Table
class Solution {
public int[] twoSum(int[] nums, int target) {
int len = nums.length; // nums의 길이
int[] re = new int[2]; // 결과값으로 반환할 배열
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
Loop1 :
for(int i = 0; i < len; i++){
int n = target - nums[i];
if(map.containsKey(n)){
re[0] = i;
re[1] = map.get(n);
break Loop1;
}
map.put(nums[i], i);
}
return re;
}
}