여러상황에서 HashTable 학습하기

Yuno·2024년 6월 26일

Practice1 HashTable을 이용한 수 찾기

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);
    }
}
  1. Hashtable<Integer, Integer> ht = new Hashtable<>(); : 해시 테이블을 생성. 키와 값 모두 Integer 타입
  2. ht.put(arr1[i], arr1[i]); : 첫 번째 배열의 각 원소를 해시 테이블에 키와 값으로 저장
  3. ht.containsKey(arr2[i]) : 두 번째 배열의 각 원소가 해시 테이블의 키로 존재하는지 확인. 존재하면 True, 존재하지 않으면 False를 출력

Practice2 target 값이 되는 두 수의 인덱스 반환하기

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)));
    }
}
  1. 함수 정의와 초기화
    -int[] result = new int[2]; : 결과를 저장할 배열을 선언
    -Hashtable<Integer, Integer> ht = new Hashtable<>(); : 해시 테이블 선언

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] 값을 키로, 현재 인덱스를 값으로 해시테이블에 저장.

  1. 반복문이 끝나고도 결과를 찾지 못하면 return null 반환
profile
Hello World

0개의 댓글