알고리즘/백준(BAEKJOON)

3052/백준/JAVA /1차원 배열/나머지 구하기/ HashSet

jojelly 2021. 3. 8. 03:57
반응형

3052번: 나머지 (acmicpc.net)

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net


이 문제는 입력된 10 가지의 값을 각자 42로 나눈 나머지를 구하여 나머지의 값이 다른 값의 갯수를 구하는 문제이다.

 

이 문제를 해결할 수 있는 가장 간단한 방법은 HashSet을 이용하는 것이다. 

-HashSet 은 자바 Collection 중 Set 의 파생클래스이다. (Set을 집합으로 생각하면 쉽다.)

 

 

  HashSet의 몇 가지 특징

 

  • 중복되는 원소를 넣을 경우 하나만 저장한다. 

  • HashSet 은 순서 개념이 없다.

  •  Collections.sort() 메소드를 사용불가. (만약 정렬을 하고 싶다면 리스트로 변환 후 정렬해야한다.)

 


이 문제는  나머지 값이 "서로 다른" 개수를  세면 되는 것이기 때문에 HashSet 을 이용할경우 나머지 값이 HashSet 원소에 이미 저장되어있는 중복된 값일 경우 저장이 되지 않는다. 즉 문제에서의 답이 HashSet에 저장되는 HashSet의 사이즈가 되는것이다. 

 

 


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package exam;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Iterator;
 
public class buffer3052 {
 
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        HashSet<Integer> number = new HashSet<Integer>();
        /*
         * 1.중복되는 원소를 넣을 경우 하나만 저장한다.
         */
        for (int i = 0; i < 10; i++) {
            number.add(Integer.parseInt(br.readLine())%42);
        }
 
        System.out.println(number. size());
    }
}
cs
반응형