22.5.04 [HackerRank]Java Hashset

서태욱·2022년 5월 5일
0

Algorithm

목록 보기
28/45
post-thumbnail

✅ 문제 분석

첫 번째 줄에는 T쌍의 수를 나타내는 정수가 있다. 다음 라인들에는
공백으로 구분된 두개의 문자열이 입력된다.

🌱 배경지식

각 자료구조 인터페이스 특징

Hashset

Set 인터페이스의 구현 클래스다.
a. 중복된 값을 허용하지 않고, 자동으로 제거해준다.따라서 값의 존재 유무를 파악할 때 사용할 수 있다.
b. 입력된 순서도 보장되지 않는다.
c. null을 값으로 허용한다.

  1. 선언
HashSet<Integer> set1 = new HashSet<Integer>();//HashSet생성
HashSet<Integer> set2 = new HashSet<>();//new에서 타입 파라미터 생략가능
HashSet<Integer> set3 = new HashSet<Integer>(set1);//set1의 모든 값을 가진 HashSet생성
HashSet<Integer> set4 = new HashSet<Integer>(10);//초기 용량(capacity)지정
HashSet<Integer> set5 = new HashSet<Integer>(10, 0.7f);//초기 capacity,load factor지정
HashSet<Integer> set6 = new HashSet<Integer>(Arrays.asList(1,2,3));//초기값 지정

기본 생성시 initial capacity(16), load factor(0.75)가 디폴트다.
저장 공간보다 값이 추가로 들어오면 약 두배로 저장 용량을 자동으로 늘린다.
그래서 과부하가 많이 발생할 수 있기 때문에, 데이터 개수를 안다면 처음부터 지정해주는 것이 좋다.

  1. 추가
HashSet<Integer> set = new HashSet<Integer>();//HashSet생성
set.add(1); //값 추가
set.add(2);
set.add(3);

add(value)메소드를 사용하면 값을 추가할 수 있다. 값이 Hashset 안에 없다면
값을 추가 하고 true를 반환해주고, 만약 존재하는 값이면(중복을 허용하지 않으므로)
false를 반환한다.

  1. 삭제
HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성
set.remove(1);//값 1 제거
set.clear();//모든 값 제거

remove메소드로 값을 지운다. 값이 존재하면 삭제 후 true를 반환, 없다면 false반환.
값을 전부 지울 경우 clear메소드를 쓴다.

4.크기 구하기

HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성
System.out.println(set.size());//set 크기 : 3

size 메소드로 set의 크기를 구할 수 있다.

  1. 출력
 HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성

System.out.println(set); //전체출력 [1,2,3]
		
Iterator iter = set.iterator();	// Iterator 사용
while(iter.hasNext()) {//값이 있으면 true 없으면 false
    System.out.println(iter.next());
}

그냥 System.out.println(set); 해주면 []안에 set의 전체 값이 출력된다.
만약 전체 객체를 한번씩 반복해서 가져오려면 iterator를 사용한다.
hasNext()는 가져올 값이 있으면 true, 없으면 false를 반환한다.
next()메소드로 객체 하나를 가져올 수 있다.

  1. 검색
HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성
System.out.println(set.contains(1)); //set내부에 값 1이 있는지 check : true

내부에 원하는 값이 있는지 contains메소드를 사용해 검색해볼 수 있다.
만약 있으면 true, 없으면 false를 반환한다.

✏️ 해설

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class JavaHashset {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int t = s.nextInt(); // 첫줄에 입력되는 정수 t는 pairs의 갯수다. 
        String [] pair_left = new String[t]; //pair_left: [null, null, null, null, null]
        String [] pair_right = new String[t];//pair_right: [null, null, null, null, null]

        for (int i = 0; i < t; i++) { //반복문을 돌리면서 값을 입력받는다.
            pair_left[i] = s.next(); // ex) i=0이면, pair_left: ["john", null, null, null, null] pair_right: ["tom", null, null, null, null]
            pair_right[i] = s.next();
        }

		//Write your code here
        HashSet<String> pairs = new HashSet<>(); //HashSet pairs를 생성한다. 
        for(int i=0; i<t; i++){ //
            pairs.add(pair_left[i]+" "+pair_right[i]); // 문자열 "왼쪽 오른쪽" 형태로 값을 추가한다. 값이 내부에 존재하면 true, 없으면 false 반환이다.
            System.out.println(pairs.size()); // size메소드를 사용해 크기를 구한다. 중복값이 있다면 그 값은 하나만 세어 준다.
        }

    }
}

👉 참고

profile
re:START

0개의 댓글