두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
42
84
252
420
840
126
42
84
420
126
1
39
40
41
42
43
44
82
83
84
85
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());
}
}
: 중복을 허용하지 않음
1) 객체를 저장하기 전 먼저 객체의 hashCode() 메소드를 호출
2) 해시코드 얻어냄
3) 저장되어 있는 객체들의 해시 코드와 해당 해시코드 비교
4) 같은 해시코드가 있으면 equals() 메소드로 두 객체 비교
5) true가 나오면 동일 객체로 판단하여 중복 저장 X
HashSet<데이터타입> 변수명 = new HashSet<데이터타입>();
HashSet<Integer> set1 = new HashSet<Integer>();
HashSet<String> set2 = new HashSet<String>();
//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