본문 바로가기
알고리즘 풀이

[백준]3052번: 나머지 - java 풀이

by 코디드 2023. 4. 13.

 

배열 풀이)

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int[] arr = new int[42];
		
		for(int i=0; i<10; i++) {
			arr[Integer.parseInt(br.readLine())%42] = 1;
		}
		
		int cnt=0;
		for(int result : arr) {
			if(result==1) {
				cnt++;
			}
		}
		System.out.println(cnt);		
	}
}

 

앞선 문제랑 푸는 방법이 일치한다.

입력 받은 수를 42로 나눈 나머지를 바로 배열에 넣고 1을 초기화 해준다.

정수 자체가 달라도 42로 나누었을때의 나머지가 같으면 중복이 되기 때문에 1이 초기화 된 배열 요소의 갯수를 구해주면 된다.

 

 

 

 

 


HashSet 풀이)

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		HashSet<Integer> hs = new HashSet<Integer>();
		
		for(int i=0; i<10; i++) {
			hs.add(Integer.parseInt(br.readLine())%42);
		}
		System.out.println(hs.size());
	}
}

 

HashSet은 중복 데이터를 저장하지 않고, 

일반 배열과 다르게 순서 개념이 없다. 정렬을 하려면 리스트로 변환 후에 정렬해야 한다.

 

서로 다른 나머지의 갯수를 세는 문제이기 때문에 중복 원소를 저장하지 않는 HashSet을 이용하고 원소의 갯수는 HashSet.size()로 구해준다.