동생 N명과 숨바꼭질을 하면서, 한번에 X만큼 움직일 수 있다고 할때, 한번에 움직이기 위한 값을 구하는 문제이다.
이번 문제에서 중요한 것은 GCD이다. 즉, 최대공약수를 구해야 한다는 것.
왜 최대공약수가 필요하냐면 한번에 이동할 수 있는 위치값을 찾아서, 동생들의 위치에 모두 도달해야 하기 때문이다.
즉, 수빈이의 위치 - 동생의 위치의 절댓값들의 최대공약수를 찾으면 되는 문제이다.
GCD함수를 구현하고, 문제를 해석하면 어렵지 않은 문제이다.
나는 배열을 사용하긴 했는데, 지금 풀고 나니까 굳이 배열이 없이도 풀 수 있는 문제인 것 같다.
#include <iostream>
#include <cstdio>
using namespace std;
int nums[100000];
int GCD(int a, int b)
{
if (b == 0)
return a;
else
return GCD(b, a % b);
}
int main(void)
{
int a, b;
int gcd = 0;
scanf("%d %d", &a, &b);
for (int i = 0; i < a; i++)
{
scanf("%d", &nums[i]);
}
gcd = nums[0] - b;
if (gcd < 0)
gcd = -gcd;
for (int i = 1; i < a; i++)
{
if (nums[i] > b)
gcd = GCD(gcd, nums[i] - b);
else
gcd = GCD(gcd, b - nums[i]);
}
printf("%d", gcd);
return 0;
}
'백준 문제풀이' 카테고리의 다른 글
다이나믹 프로그래밍 기초 (0) | 2020.05.23 |
---|---|
골드바흐 파티션_ 백준 17103 (0) | 2020.05.20 |
GCD 합 _ 백준 9613 (0) | 2020.05.18 |
팩토리얼 0 의 개수 _ 백준 1676 (0) | 2020.05.17 |
골드바흐의 추측 _ 백준 6588 (0) | 2020.05.17 |