Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
Tags more
Archives
Today
Total
관리 메뉴

luke

[백준] - 나머지 (3052) (자바/Java) 본문

알고리즘문제/백준 문제(Java)

[백준] - 나머지 (3052) (자바/Java)

luke-king 2024. 5. 26. 16:23

 

 

 

 

 

문제 : https://www.acmicpc.net/problem/3052

 

 

 

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

풀이.


 

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        boolean[] arr = new boolean[42];
        int b = 42;

        for (int i = 0; i < 10; i++) {
            arr[sc.nextInt() % b] = true;
        }

        int cnt = 0;
        for (boolean value : arr) {
            if (value) {
                cnt++;
            }
        }
        System.out.println(cnt);



    }

}

 

오늘 문제는 백준의 " 나머지 " 문제다.

이번 문제는 쉬운 거 같으면서도 아리송했다... 우선 배열이라 생각하면 숫자형(int...), 문자열(String...) 등 많이 사용하는 걸 알 수 있는데 boolean형으로 배열을 만들어 사용한 게 새로운 생각의 길이 트인 느낌이었다..!

여하튼 바로 문제 풀이 가보겠다.

 

1. 우선 42로 나눠 구할 수 있는 수는 0 ~ 41 이기에 길이가 42인 boolean형 배열을 만들어 준다.

 

2. 10개의 입력을 통해 입력값 % b는 true로 바꿔준다.

 

3. 입력한 값들을 반복문 루프를 통해 value 가 참인 것들만 cnt 변수에 1씩 증가시켜 준다.

여기서 value부분에 중복되는 값들은 어떻게 체크되는지 궁금할 거라 생각해 예시를 들어보겠다.

만약 arr [ 1 % 42 ] 를 할경우 arr[1] 인걸 우린 알수 있다.

근데 만약 arr[ 43 % 42 ] 라면? 이 또한 나머지가 1 이기에 arr [1]이다. 이 말은 arr [1] 번째 같은 인덱스이기에 중복 제거가 되는 것이다.