import java.util.Hashtable;
public class Practice1 {
public static void solution(int[] arr1, int[] arr2) {
Hashtable<Integer, Integer> ht = new Hashtable<>();
for (int i = 0; i < arr1.length; i++) {
ht.put(arr1[i], arr1[i]);
}
for (int i = 0; i < arr2.length; i++) {
if (ht.containsKey(arr2[i])) {
System.out.println("True");
} else {
System.out.println("False");
}
}
System.out.println();
}
public static void main(String[] args) {
// Test code
int[] arr1 = {1, 3, 5, 7, 9};
int[] arr2 = {1, 2, 3, 4, 5};
solution(arr1, arr2);
}
}
import java.util.Arrays;
import java.util.Hashtable;
public class Practice2 {
public static int[] solution(int[] numbers, int target) {
int[] result = new int[2];
Hashtable<Integer, Integer> ht = new Hashtable<>();
for (int i = 0; i < numbers.length; i++) {
if (ht.containsKey(numbers[i])) {
result[0] = ht.get(numbers[i]);
result[1] = i;
return result;
}
ht.put(target - numbers[i], i);
}
return null;
}
public static void main(String[] args) {
// Test code
int[] nums = {7, 11, 5, 3};
System.out.println(Arrays.toString(solution(nums, 10)));
nums = new int[]{8, 3, -2};
System.out.println(Arrays.toString(solution(nums, 6)));
nums = new int[]{1, 2, 3};
System.out.println(Arrays.toString(solution(nums, 12)));
}
}
2.배열 순회 및 해시 테이블 이용
-for (int i = 0; i < numbers.length; i++) : 배열 numbers를 순회
-if (ht.containsKey(numbers[i])) : 현재 숫자가 해시 테이블의 키로 존재하는지 확인
존재한다면, 이는 이전에 target - numbers[i] 값을 키로 저장했기 때문
-result[0] = ht.get(numbers[i]); : 해당 값의 인덱스를 결과 배열의 첫 번째 요소로 저장
-result[1] = i; : 현재 인덱스를 결과 배열의 두 번째 요소로 저장
-return result; : 결과 배열을 반환
-ht.put(target - numbers[i] - i); : 이후에 numbers[i] 값이 나타날 때 두 수의 합이 target이 되는것을 확인하기 위해서 target - numbers[i] 값을 키로, 현재 인덱스를 값으로 해시테이블에 저장.