문제
수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다.
수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이동할 수 있다. 수빈이의 위치가 동생이 있는 위치와 같으면, 동생을 찾았다고 한다.
모든 동생을 찾기위해 D의 값을 정하려고 한다. 가능한 D의 최댓값을 구해보자.
입력
첫째 줄에 N(1 ≤ N ≤ 105)과 S(1 ≤ S ≤ 109)가 주어진다. 둘째 줄에 동생의 위치 Ai(1 ≤ Ai ≤ 109)가 주어진다. 동생의 위치는 모두 다르며, 수빈이의 위치와 같지 않다.
출력
가능한 D값의 최댓값을 출력한다.
풀이 코드
using System;
using System.Collections.Generic;
using System.Linq;
public partial class Program
{
static void Main(string[] args)
{
var input = Console.ReadLine().Split();
var num = Int32.Parse(input[1]);
var list = new List<int>();
var nums = Console.ReadLine().Split();
foreach (var i in nums)
{
var n = Int32.Parse(i);
list.Add(Math.Abs(n - num));
}
Console.WriteLine(list.Aggregate(gcd));
}
static int gcd(int n, int m)
{
while (m > 0)
{
var r = n % m;
n = m;
m = r;
}
return n;
}
}
정리하자면
처음에는 순열로 접근하려고 했는데 중간중간 빠진 부분들이 있어서 순열로는 해결이 불가능했다. 그래서 제공되는 값들에 현재 위치를 뺀 후 그 값들의 최대공약수를 구하는 방법으로 구현했다.
'프로그래밍 > Algorithm' 카테고리의 다른 글
C# [백준 BAEKJOON] 11279번 최대 힙 (0) | 2024.05.14 |
---|---|
C# [백준 BAEKJOON] 1927번 최소 힙 (0) | 2024.05.07 |
C# [백준 BAEKJOON] 18258번 큐 2 (1) | 2024.05.02 |
C# [백준 BAEKJOON] 10845번 큐 (1) | 2024.04.30 |
C# [백준 BAEKJOON] 1935번 후위 표기식2 (1) | 2024.04.26 |
댓글