Algorithms 🚀/Baekjoon

[백준/3052번] 나머지

728x90

www.acmicpc.net/problem/3052

 

3052번: 나머지

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

www.acmicpc.net

이 문제도 간단한 문제이고, 배열을 차례대로 돌면서 값을 비교하면 되는 문제이다.

배열로 푸는 문제이지만 HashSet을 이용하면 정말 간단하게 풀 수 있는 문제이다.

 

풀이 🎉

1. BufferedReader + 배열

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

public class BOJ_3052 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int count = 1;
		
		int[] arr = new int[10];
		for(int i=0; i<arr.length; i++) {
			arr[i] = Integer.parseInt(br.readLine()) % 42;
		}
		
		br.close();
		Arrays.sort(arr);
		
		for(int i=0; i<arr.length-1; i++) {
			if(arr[i] != arr[i+1]) count++;
		}
		
		System.out.println(count);
	}
}

 

2. BufferedReader + HashSet

HashSet의 중복을 허용하지 않는 특성을 이용하면 저어어엉말 간단하게 풀 수 있다.

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

public class BOJ_3052 {
	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);
		}
		
		br.close();
		System.out.println(hs.size());
	}
}

HashSet은 중복을 허용하지 않기 때문에 중복되지 않는 값들만 들어가게 되고 size() 메서드로 Set의 크기를 출력해주면 된다.

 

효율성 테스트 결과

제출 번호: 25942572 -> HashSet

제출 번호: 25942395 -> 배열

728x90

'Algorithms 🚀 > Baekjoon' 카테고리의 다른 글

[백준/1427번] 소트인사이드 - JAVA[자바]  (0) 2021.04.12
[백준/8958번] OX퀴즈  (0) 2021.02.16
[백준/1546번] 평균  (0) 2021.02.02
[백준/2577번] 숫자의 개수  (0) 2021.02.01
[백준/10818번] 최소, 최대  (0) 2021.02.01