[백준]3052_나머지_HashSet

김피자·2022년 12월 24일
0

백준

목록 보기
5/42

문제

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.

수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.


출력

첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.


예제 입력 1

42
84
252
420
840
126
42
84
420
126

예제 출력 1

1

예제 입력 2

39
40
41
42
43
44
82
83
84
85

예제 출력 2

6

풀이


import java.util.HashSet;
import java.util.Scanner;

public class bj3052_나머지 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		HashSet<Integer> set = new HashSet<Integer>();
		
		for(int i = 0; i<10; i++) {
			int num = sc.nextInt()%42;
			set.add(num);
		}
			System.out.println(set.size());
	}

}

HashSet

: 중복을 허용하지 않음

HashSet이 중복을 거르는 과정

1) 객체를 저장하기 전 먼저 객체의 hashCode() 메소드를 호출
2) 해시코드 얻어냄
3) 저장되어 있는 객체들의 해시 코드와 해당 해시코드 비교
4) 같은 해시코드가 있으면 equals() 메소드로 두 객체 비교
5) true가 나오면 동일 객체로 판단하여 중복 저장 X

HashSet 변수 선언

HashSet<데이터타입> 변수명 = new HashSet<데이터타입>();

HashSet<Integer> set1 = new HashSet<Integer>();		
HashSet<String> set2 = new HashSet<String>();

HashSet 값 추가와 값, 크기 출력

//1) 값 추가
	//Integer
	HashSet<Integer> set1 = new HashSet<Integer>();	
    set1.add(1);
    set1.add(2);
    set1.add(3);
    set1.add(1); //중복
    set1.add(1); //중복
	//String
	HashSet<String> set2 = new HashSet<String>();
	set2.add("a");
    set2.add("b");
    set2.add("c");
    set2.add("a"); //중복
    set2.add("a"); //중복
    
//2-1) 값 출력
	System.out.println("set1 : " + set1);
    System.out.println("set2 : " + set2);
    
//2-2) Integer 출력
	Iterator iter1 = set1.iterator();
	while(iter1.hasNext()) {
		System.out.print(iter1.next() + " ");
	}
	System.out.println("");
        
//2-3) String 출력
	Iterator iter2 = set2.iterator();
	while(iter2.hasNext()) {
		System.out.print(iter2.next() + " ");
    }

//3) 크기 출력
	System.out.println("set1 크기 : " + set1.size());
    System.out.println("set2 크기 : " + set2.size());
set1 : [1, 2, 3]
set2 : [a, b, c]
1 2 3
a b c
set1 크기 : 3
set2 크기 : 3

+ 추가) 값 찾기

HashSet<Integer> set1 = new HashSet<Integer>();			
		set1.add(1);
		set1.add(2);
		set1.add(3);
		set1.add(1);
		
		System.out.println("1 있어? : " + set1.contains(1));
				
		// String
		HashSet<String> set2 = new HashSet<String>();

		set2.add("a");
		set2.add("b");
		set2.add("c");
		set2.add("a");
		
		System.out.println("z 있어? : " + set2.contains("z"));
1 있어? : true
z 있어? : false
profile
제로부터시작하는코딩생활

0개의 댓글