본문 바로가기
JAVA

[JAVA][백준] 3052_나머지

by saemsaem 2024. 4. 15.


1. 배열을 사용하는 방법

import java.util.Scanner;

public class remainder_3052 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int[] remain = new int[10];
        int sum = 0;

        for (int b = 0; b < 10; b++) {
            remain[b] = sc.nextInt() % 42;
        }

        for (int i = 0; i < 10; i++) {
            int cnt = 0;

            for (int j = i+1; j < 10; j++) {

                if (remain[i] == remain[j]) {
                    cnt ++;
                }
            }
            if (cnt == 0){
                sum ++;
            }
        }//for(i)

        sc.close();
        System.out.println(sum);
    }
}

2. HashSet을 사용하는 방법

import java.util.HashSet;
import java.util.Scanner;

public class remainder_3052 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        HashSet<Integer> h = new HashSet<Integer>();

        for (int i = 0; i < 10; i++) {
            h.add(sc.nextInt() % 42);
        }

        sc.close();
        System.out.println(h.size());
    }
}

HashSet은 Collection중 Set의 파생클래스이다.

  • 중복되는 원소를 허용하지 않는다. (원소가 중복될 경우 하나만 저장한다)
  • HashSet은 순서 개념이 없다.

이 문제에서 서로 다른 나머지값의 수를 세면 되기 때문에,

HashSet을 사용하면 중복되지 않은 원소는 저장하고, 중복일 경우 저장이 되지 않는다.

HashSet에 저장된 원소의 개수가 HashSet의 size가 된다.


3. boolean을 사용하는 방법

import java.util.Scanner;

public class remainder_3052 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] remain = new int[10];
        int res = 0;

        for (int i = 0; i < 10; i++) {
            remain[i] = sc.nextInt() % 42;
        }

        for (int i = 0; i < 10; i++) {
            boolean bl = false;
            
            for (int j = i+1; j < 10; j++) {
                if (remain[i] == remain[j]) {
                    bl = true;
                    break;
                }
            }//for(j)
            if (bl == false) {
                res ++;
            }
        }//for(i)

        System.out.println(res);
    }
}

boolean의 기본값을 false로 설정하고,

이중for문을 돌며 배열의 n번째와 n+1번째의 값을 비교한다.

값이 같다면 boolean을 true로 변경하고, 안쪽 반복문을 빠져나온다 (한번만 비교하면 됨)

이후 boolean값이 false일 때 res값을 +1 한다.

true라면 나머지가 서로 같다는 뜻이기 때문에 res값을 증가시킬 필요가 없다.

'JAVA' 카테고리의 다른 글

[JAVA][백준] 10809_알파벳  (0) 2024.04.15
[JAVA][백준] 8958_OX퀴즈  (0) 2024.04.15
[JAVA][백준] 1152_단어의 개수  (0) 2024.04.15
[JAVA][백준] 2884_알람시계  (0) 2024.04.15
[JAVA][백준] 2562_최댓값  (0) 2024.04.15