문제
https://www.acmicpc.net/problem/3052
3052번: 나머지
각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.
www.acmicpc.net
해결
입력받은 10개의 수를 42로 나눈 나머지 중에서 서로 다른 값이 몇 개인지 출력해야 하는 문제였다.
1) 10개의 수와 42로 나눈 나머지 모두 for문을 통해 배열에 저장한 뒤
2) TreeSet 컬렉션을 이용해 나머지 값이 저장된 배열 내 중복 값을 없앴고
3) Iterator 인터페이스를 이용해 중복을 제외한 나머지의 개수를 도출하였다.
TreeSet
이진 트리(binary search)를 기반으로 한 Set 컬렉션이다.
TreeSet에 객체를 저장하면 자동으로 정렬되고 중복된 값은 저장되지 않는다.
메소드 | 기능 |
boolean add(E e) | 해당 set에 전달된 요소를 추가함. |
https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/TreeSet.html
TreeSet (Java SE 16 & JDK 16)
Type Parameters: E - the type of elements maintained by this set All Implemented Interfaces: Serializable, Cloneable, Iterable , Collection , NavigableSet , Set , SortedSet A NavigableSet implementation based on a TreeMap. The elements are ordered using th
docs.oracle.com
Iterator
컬렉션에 저장된 요소를 읽어오는 반복자
메소드 | 기능 |
boolean hasNext() | 해당 Iteration이 다음 요소를 가지고 있으면 true를 반환하고, 더 이상 다음 요소를 가지고 있지 않으면 false를 반환함. |
E next() | Iteration의 다음 요소를 반환함. |
https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/util/Iterator.html
Iterator (Java SE 16 & JDK 16)
Type Parameters: E - the type of elements returned by this iterator All Known Subinterfaces: EventIterator, ListIterator , PrimitiveIterator , PrimitiveIterator.OfDouble, PrimitiveIterator.OfInt, PrimitiveIterator.OfLong, XMLEventReader All Known Implement
docs.oracle.com
구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int[] num = new int[10];
for (int i = 0; i < num.length; i++) {
num[i] = sc.nextInt(); // 10개의 수를 입력받아 배열에 저장
}
int[] remainder = new int[10];
for (int i = 0; i < remainder.length; i++) {
remainder[i] = num[i] % 42; // 10개의 수를 42로 나눈 나머지를 배열에 저장
}
TreeSet ts = new TreeSet(); // TreeSet 선언
for (int i = 0; i < remainder.length; i++) {
ts.add(remainder[i]); // TreeSet에 나머지를 저장한 배열의 원소를 추가 (중복 값은 저장되지 않는다)
}
Iterator it = ts.iterator(); // Iterator 선언
int cnt = 0; // 카운터 변수 선언 후 0으로 초기화
while (it.hasNext()) { // Iterator가 다음 요소를 가지고 있을 때까지 while문이 실행된다
it.next(); // Iterator에 다음 요소를 반환
cnt++; // 요소를 가지고 있을 때마다 증가 (TreeSet 요소의 개수만큼 증가하므로 중복이 걸러진 나머지의 개수를 알 수 있다)
}
System.out.println(cnt);
}
}
|
cs |
결과
'Algorithm > Beakjoon' 카테고리의 다른 글
[Java] baekjoon 4344 : 평균은 넘겠지 / 1차원 배열 (0) | 2021.08.28 |
---|---|
[Java] baekjoon 8958 : OX퀴즈 / 1차원 배열 (0) | 2021.08.27 |
[Java] baekjoon 15552 : 빠른 A+B / for문 (0) | 2021.08.25 |
[Java] baekjoon 11022 : A+B - 8 / for문 (0) | 2021.08.24 |
[Java] baekjoon 11720 : 숫자의 합 / 문자열 (0) | 2021.08.04 |
댓글