문제 풀기 앞서,
HashSet
은 Java의 Collection 중 Set
의 파생 클래스이다.
(Set
을 "집합" 개념으로 이해하면 된다.)
HashSet
특징:Collections.sort()
메소드를 직접 사용할 수 없으며, 정렬이 필요하다면 리스트로 변환 후 정렬해야 함 어떤 수를 특정 값으로 나눈 나머지를 구할 때, 서로 다른 나머지의 개수를 세는 것이 목표라면 HashSet을 활용하는 것이 효과적이다.
링크: https://www.acmicpc.net/problem/3052
import java.util.Scanner;
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
HashSet<Integer> h = new HashSet<Integer>();
for (int i = 0; i < 10; i++) {
h.add(scan.nextInt() % 42);
//입력받은 값의 나머지 값을 add메소드를 통해 HashSet에 저장
}
scan.close();
System.out.print(h.size());
}
}
HashSet.add()
: HashSet
에 요소를 추가하는 메소드HashSet<Integer>
: 제네릭 타입을 Integer
로 선언했으므로, int
값 또는 Integer
객체만 저장할 수 있음HashSet
에 값을 추가할 때, 중복된 값이 없으면 저장되면서 true
를 반환하고, 이미 존재하는 값이면 저장되지 않으며 false
를 반환HashSet.size()
: HashSet
에 저장된 원소의 개수(= 크기)를 반환아래와 같은 방법으로도 풀 수 있다.
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int numbers[] = new int[10];
for(int i=0; i<10; i++) numbers[i] = scan.nextInt() % 42;
int count = 0;
for(int i=0; i<numbers.length; i++){
int tmp = 0;
for(int j=i+1; j<numbers.length; j++){
if(numbers[i] == numbers[j]) tmp++;
}
if(tmp == 0) count++;
}
System.out.println(count);
}
}