[Algorithm] 백준: 3052 나머지 (Java11)

m_ngyeong·2025년 3월 12일
0

Algorithm

목록 보기
4/8
post-thumbnail

3052 나머지


HashSet

문제 풀기 앞서,
HashSet은 Java의 Collection 중 Set의 파생 클래스이다.
(Set을 "집합" 개념으로 이해하면 된다.)

HashSet 특징:

  • 중복된 원소를 허용하지 않음: 동일한 원소가 추가될 경우 하나만 저장됨
  • HashSet은 순서 개념이 없음: 내부적으로 해시 테이블을 사용하기 때문에 요소의 순서가 일정하지 않음 따라서 Collections.sort() 메소드를 직접 사용할 수 없으며, 정렬이 필요하다면 리스트로 변환 후 정렬해야 함

예) HashSet을 활용한 "서로 다른 나머지 개수" 계산

어떤 수를 특정 값으로 나눈 나머지를 구할 때, 서로 다른 나머지의 개수를 세는 것이 목표라면 HashSet을 활용하는 것이 효과적이다.

  • HashSet에 나머지 값을 추가하면, 이미 존재하는 값은 중복 저장되지 않음.
  • HashSet에 저장된 원소의 개수는 곧 "서로 다른 나머지 개수"가 됨.

문제:

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

정답:

방법1

import java.util.Scanner;
import java.util.HashSet;
 
public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		HashSet<Integer> h = new HashSet<Integer>();
 
		for (int i = 0; i < 10; i++) {
			h.add(scan.nextInt() % 42);
			//입력받은 값의 나머지 값을 add메소드를 통해 HashSet에 저장
		}
		scan.close();
		System.out.print(h.size());
	}
}
  • HashSet.add(): HashSet에 요소를 추가하는 메소드
  • HashSet<Integer>: 제네릭 타입을 Integer로 선언했으므로, int 값 또는 Integer 객체만 저장할 수 있음
  • HashSet에 값을 추가할 때, 중복된 값이 없으면 저장되면서 true를 반환하고, 이미 존재하는 값이면 저장되지 않으며 false를 반환
  • HashSet.size(): HashSet에 저장된 원소의 개수(= 크기)를 반환

방법2

아래와 같은 방법으로도 풀 수 있다.

import java.util.Scanner;

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

        int numbers[] = new int[10]; 
        for(int i=0; i<10; i++) numbers[i] = scan.nextInt() % 42;

        int count = 0;
        for(int i=0; i<numbers.length; i++){
            int tmp = 0;
            for(int j=i+1; j<numbers.length; j++){
                if(numbers[i] == numbers[j]) tmp++;
            }
            if(tmp == 0) count++;
        }
        System.out.println(count);
    }
}


참고, https://st-lab.tistory.com/46

profile
ʚȉɞ

0개의 댓글