suheang

[백준] | JAVA, 자바 | 3052번 - 나머지 본문

알고리즘

[백준] | JAVA, 자바 | 3052번 - 나머지

suheang 2024. 2. 8. 23:42

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

 

3052번: 나머지

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

www.acmicpc.net


문제 요약 : 

수 10개를 입력 받은 뒤, 이를 42로 나눈 나머지를 구한다.

그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.


문제풀이

import java.util.ArrayList;
import java.util.Scanner;

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

        ArrayList<Integer> num = new ArrayList<>();
        int count = 0;

        for (int i = 0; i < 10; i++) {
            boolean check = true;
            num.add(sc.nextInt()%42);

            for (int j = 0; j < i; j++) {
                if (num.get(i).equals(num.get(j))) {
                    check = false;
                    break;
                }
            }
            if (check){
                count +=1;
            }
        }
        System.out.println(count);
    }
}

 

1. 서로 다른 값 갯수를 확인할 변수 count 생성

2. for 문을 통해 숫자 10개를 입력받고 check 값을 모두 true로 저장, 42로 나눈 나머지 값을 num에 저장

3. for 문을 하나 더 만들어 num에 저장된 값들을 비교 후 같다면 check 값을 false로 변경

4. if 문을 사용해 check가 true라면 count 값 1 증가

5. count(서로 다른 값 갯수) 출력


리팩토링

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

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

        for (int i = 0; i < 10; i++) {
            num.add(sc.nextInt() % 42);
        }
        System.out.println(num.size());
    }

}

 

문제를 풀 때 배열을 사용해서 풀었었는데 다른 사람들은 배열로 푸는 방법, HashSet을 사용해서 푸는 방법 두 가지 방법으로 문제를 풀었다.

 

HashSet은 중복된 값을 허용하지 않고 입력한 순서가 보장되지 않는 특징이 있다. 이를 활용해서 보다 간단하게 문제를 푸는 방법이 있었다.

 

1. HashSet 선언하기

2. for문을 사용하여 입력받은 숫자를 42로 나누고 HashSet에 추가

3. HashSet은 중복된 값을 허용하지 않기 때문에 나머지가 같으면 추가되지 않고, 나머지가 다를 때 추가

4. HashSet의 크기 출력