2가지 풀이법이 있다.
1. 배열을 이용한 방법
2. HashSet을 이용한 방법
배열을 이용한 방법을 먼저 살펴보면,
1. 불린으로 된 배열을 먼저 만들어주고,
boolean[] arr = new boolean[42];
2. 입력된 10개의 수를 대상으로 42로 나눈 나머지에 해당하는 배열의 위치를 true로 바꾸어준다.
for(int i = 0; i < 10; i++){
arr[Integer.parseInt(br.readLine()) % 42] = true;
}
3. arr의 boolean 값들을 for문에서 value로 받고, value==true이면 cnt를 1 올려준다.
int cnt = 0;
for(boolean value : arr){
if(value){
cnt++;
}
}
System.out.print(cnt);
완성된 코드.
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean[] arr = new boolean[42];
for(int i = 0; i < 10; i++){
arr[Integer.parseInt(br.readLine()) % 42] = true;
}
int cnt = 0;
for(boolean value : arr){
if(value){
cnt++;
}
}
System.out.print(cnt);
}
}
2. HashSet을 이용한 방법.
HashSet은 자바 Collection 중 Set의 파생 클래스이다.
set을 집합이라고 생각하면 되는데, HashSet의 경우 몇가지 특징이 있다.
1) 중복되는 원소를 넣을 경우 하나만 저장한다. 즉, 중복 원소를 허용하지 않는다.
2) HashSet은 순서 개념이 없다. 따라서 Collections.sort() 메소드를 사용할 수 없다.
만약 정렬을 하고싶다면 리스트로 변환 후 정렬해야 한다.
이 문제에서는 단순히 " 서로 다른" 개수를 세면 되는 것이기에 HashSet을 이용하면
자연스레 나머지 값이 HashSet원소에 이미 저장되어 있어 중복일 경우 저장 되지 않는다.
HashSet의 사이즈 자체가 서로 다른 나머지의 개수가 되는 것이다.
import java.util.HashSet;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashSet<Integer> hSet = new HashSet<Integer>();
for (int i = 0; i < 10; i++) {
hSet.add(Integer.parseInt(br.readLine()) % 42);
}
System.out.print(hSet.size());
}
}
시간은 크게 다르지 않으니 편한 것을 사용하면 되겠다.
'Programming > 알고리즘' 카테고리의 다른 글
[백준] 8958 - OX퀴즈 - JAVA[자바] (0) | 2022.11.27 |
---|---|
[백준] 1546 - 평균 - JAVA[자바] (0) | 2022.11.27 |
[백준] 5597 - 과제 안 내신 분..? - JAVA[자바] (0) | 2022.11.27 |
[백준] 10871 - X보다 작은 수 - JAVA[자바] (0) | 2022.11.27 |
[백준] 10807 - 개수 세기 - JAVA[자바] (0) | 2022.11.27 |