본문 바로가기

코딩테스트/JAVA

[프로그래머스 JAVA] 폰켓몬

해시 첫문제 

 

https://school.programmers.co.kr/learn/courses/30/lessons/1845

 

해시의 기본적인 정리

 

해시 테이블 또는 해시맵은 데이터를 key-value 형식으로 저장하는 자료구조이다.

해시는 key를 받아 임의의 해시 함수를 통해 도출된 해시 값을 배열의 Index로 사용한다. 이를 통해 O(1) 이라는 빠른 속도로 데이터에 접근이 가능하다.

 

해시 테이블의 종류는 크게 Map, Set 두가지로 분류할 수 있다.

 

1. Map : 위에서 설명한 해시 테이블

 

2. Set : 메모리 공간에 value는 저장하지 않고 key만 저장한다는 점이 다르다. Set은 중복을 허용하지 않는 값을 모아 놓은 컬렉션으로 생각하면 좋다.

 

이 문제는 중복을 허용하지 않는 범위에 최대값을 구하여(size) 주어진 nums의 절반 값(len)과 비교했을때

 

size > len -> return len

 

size < len -> return size 해주면 되는 문제이다.

 

따라서 중복을 허용하지 않는 범위에 최대값을 모으기 위해 HashSet을 사용해 준다.

 

import java.util.*;

HashSet<Integer> set = new HashSet<>(); // 새로운 HashSet 생성 Integer 값을 key로 받고있다.
set.add(num); //set에 num 추가
set.size(); //set size 출력

 

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        int answer = 0;
        int len = nums.length / 2;

        HashSet<Integer> set = new HashSet<>();

        for(int num : nums){
            set.add(num);
        }

        int size = set.size();

        if(size >= len) answer = len;
        else answer = size;


        return answer;
    }
}