백준/Java

[백준 자바] 3052번(나머지) - 배열의 중복 요소 제거

gamzaggang7 2024. 4. 7. 21:19
728x90

난이도 - 브론즈 2

문제

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 

수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

입력

첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.

출력

첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.

 


 

 

1. Arrays.distinct

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int[] arr = new int[10];

        for (int i = 0; i < 10; i++) {
            arr[i] = Integer.parseInt(br.readLine()) % 42;
        }
        arr = Arrays.stream(arr).distinct().toArray();

        bw.write(String.valueOf(arr.length));

        bw.flush();
        br.close();
        bw.close();
    }
}

사이즈 10인 배열을 만들고 입력 수를 42로 나눈 나머지들을 배열에 넣는다. 배열을 Stream으로 전환하고 distinct 메서드를 이용하여 중복 요소를 제거한다. 마지막으로 toArray 메서드로 다시 배열로 전환한다.

 

결과)

 

728x90

2. Set 집합 

중복 저장하지 않는 집합을 사용한다. 집합의 크기가 답이 된다.

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        HashSet<Integer> set = new HashSet<>();

        for (int i = 0; i < 10; i++) {
            set.add(Integer.parseInt(br.readLine()) % 42);
        }

        bw.write(String.valueOf(set.size()));

        bw.flush();
        br.close();
        bw.close();
    }
}

728x90