본문 바로가기
알고리즘/코딩 - 백준

[Java][자바][백준][1145번] 적어도 대부분의 배수 - 탐색/브루트 포스

by 주남2 2019. 11. 9.
반응형

문제 설명

다섯 개의 자연수가 있다. 이 수의 적어도 대부분의 배수는 위의 수 중 적어도 세 개로 나누어 지는 가장 작은 자연수이다.

서로 다른 다섯 개의 자연수가 주어질 때, 적어도 대부분의 배수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 다섯 개의 자연수가 주어진다. 100보다 작거나 같은 자연수이고, 서로 다른 수이다.

출력

첫째 줄에 적어도 대부분의 배수를 출력한다.

 

생각

문제만 보니까 이해가 안간다. 30 42 70 35 90 이 있다면 210이 정답이 된다. (30,70,42 의 배수이므로)

푸는 방법은 가장 작은 수를 구해서 1씩 증가시키며 각 수로 나누어서 나누어 떨어지는 수가 3개 이상 되면 바로 출력해주면 된다. 배수이므로 굳이 1부터 시작할 필요가 없다.

 

입력이 얼마 안되서 Scanner 를 썼지만 BufferedReader를 써야 속도가 빠르니 알고리즘을 풀 때는 BufferedReader를 쓰도록 하자!

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] arr = new int[5];
        
        for(int i=0; i<arr.length; i++) {
            arr[i] = sc.nextInt();
        }
        
        int min = getMin(arr);
        int count = 0;
        
        while(true) {
            for(int i=0; i<arr.length; i++) {
                if(min%arr[i] == 0) {
                    count++;
                }
            }
            
            if(count >= 3) {
                break;
            } else {
                count = 0;
                min++;
            }
            
        }
        
        System.out.println(min);
    }
    
    public static int getMin(int[] arr) {
        int min = Integer.MAX_VALUE;
        
        for(int i=0; i<arr.length; i++) {
            if(min > arr[i]) {
                min = arr[i];
            }
        }
        
        return min;
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 
반응형