본문 바로가기
Algorithm/Beakjoon

[Java] baekjoon 3052 : 나머지 / 1차원 배열

by Amy97 2021. 8. 26.
728x90

문제 


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

결과 


 

728x90

댓글