728x90
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
boolean arr[] = new boolean[42];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
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.println(cnt);
}
}
Scanner보다 속도가 빠른 BufferedReader로 해결해 보았다.
boolean의 기본 값은 false 이므로
나머지 값으로 설정된 arr의 인덱스에 해당하는 값을 true로 바꿔준 후 true의 갯수만 세면 된다.
여기서 같은 값이 있더라도 같은 인덱스에 true로 설정되므로 중복 회피가 가능하다.
for문의 콜론은 arr에서 차례대로 값을 가져와 value에 넣겠다는 의미다.
if(value)에서 value==true라고 주지 않은 것은 if문은 조건이 true일 경우에만 이하 내용을 실행하기 때문에
value와 value==true는 의미가 같다.
만약 false 일 때 cnt++ 이라면 if(value==false)라고 해야 할 것이다.
import java.util.Scanner;
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
HashSet<Integer> h = new HashSet<Integer>();
for (int i = 0; i < 10; i++) {
h.add(in.nextInt() % 42);
}
in.close();
System.out.print(h.size());
}
}
다음으로는 자바 Collection 중 Set의 파생 클래스인 HashSet을 이용해 푸는 방법이다.
HashSet의 특징
-중복되는 원소를 넣을 경우 하나만 저장
-순서 개념이 없다
중복을 허용하지 않기 때문에 나머지를 HashSet에 저장한 후 HashSet의 크기를 구해 주면 된다.
728x90
'백준 단계별' 카테고리의 다른 글
[Java] 백준 8958: OX퀴즈 (0) | 2023.01.11 |
---|---|
[Java] 백준 1546: 평균 (0) | 2023.01.10 |
[Java] 백준 5597: 과제 안 내신 분..? (0) | 2023.01.06 |
[Java] 백준 2562: 최댓값 (0) | 2023.01.05 |
[Java] 백준 10871: X보다 작은 수 (0) | 2023.01.05 |