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

[Java] BOJ 2981번 검문

by 컴공맨 2021. 7. 8.
 

2981번: 검문

트럭을 타고 이동하던 상근이는 경찰의 검문을 받게 되었다. 경찰은 상근이가 운반하던 화물을 하나하나 모두 확인할 것이기 때문에, 검문하는데 엄청나게 오랜 시간이 걸린다. 상근이는 시간

www.acmicpc.net


풀이

유클리드 호제법을 사용하여 해결했습니다.

수학과 관련된 알고리즘에 대해 부족함을 많이 느낄 수 있었던 문제였습니다.

정말 정리가 잘 된 블로그가 있어 링크를 남깁니다.

 

[백준] 2981번 : 검문 - JAVA [자바]

www.acmicpc.net/problem/2981 2981번: 검문 트럭을 타고 이동하던 상근이는 경찰의 검문을 받게 되었다. 경찰은 상근이가 운반하던 화물을 하나하나 모두 확인할 것이기 때문에, 검문하는데 엄청나게 오

st-lab.tistory.com


코드

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

public class Main {
	public static int N;
	public static int[] num;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		N = Integer.parseInt(br.readLine());
		
		num = new int[N];
		
		for (int i = 0; i < N; ++i) {
			num[i] = Integer.parseInt(br.readLine());
		}
		
		Arrays.sort(num);
		
		int gcd = num[1] - num[0];
		for (int i = 2; i < N; ++i) {
			gcd = getGcd(gcd, num[i] - num[i - 1]);
		}
		
		StringBuilder sb = new StringBuilder("");		
		for (int i = 2; i <= gcd; ++i) {
			if (gcd % i == 0) {
				sb.append(i).append(" ");
			}
		}
		
		System.out.println(sb);
	}
	
	// 유클리드 호제법
	public static int getGcd(int n1, int n2) {
		while (n2 != 0) {
			int r = n1 % n2;
			n1 = n2;
			n2 = r;
		}
		
		return n1;
	}
}

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com

 

'알고리즘 > 백준' 카테고리의 다른 글

[Java] BOJ 6593번 상범 빌딩  (0) 2021.07.12
[Java] BOJ 2668번 숫자고르기  (0) 2021.07.09
[Java] BOJ 1038번 감소하는 수  (0) 2021.07.07
[Java] BOJ 14226번 이모티콘  (0) 2021.07.06
[Java] BOJ 2470번 두 용액  (0) 2021.07.05