본문 바로가기
백준

[백준 17087] 숨바꼭질 6, C++

by 황인태(intaehwang) 2020. 1. 13.
반응형

https://www.acmicpc.net/problem/17087

 

17087번: 숨바꼭질 6

수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이동할 수 있다. 수빈이의 위치가 동생이 있는 위치와 같으면, 동생을 찾았다고 한다. 모든 동생을 찾기위해 D의 값을 정하려고 한다. 가능한 D의 최댓값을 구해보자.

www.acmicpc.net

 본 문제는 수빈이가 동생 N명을 찾는 문제다. 수빈이의 위치를 X라고 했을 때, X+D, X-D로 이동할 수 있다. 따라서, 동생과 수빈이의 위치의 차를 구해야 하고, D의 최댓값을 구해야 하므로 수빈이의 위치와 동생의 위치의 차의 최대공약수를 구해야 한다.

  1. 수빈이와 동생의 위치의 차를 구한다.
  2. 1번의 최대공약수를 구한다.
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
#include <cstdio>
 
using namespace std;
 
int cal(int x, int y) {
    if (y == 0return x;
    else return cal(y, x%y);
}
 
int main() {
    int d[100001];
    int n, s;
    scanf("%d %d"&n, &s);
    for (int i = 0; i < n; i++) {
        int tmp;
        scanf("%d"&tmp);
        tmp -= s;
        if (tmp < 0) tmp = -tmp;
        d[i] = tmp;
    }
    int ans = d[0];
    for (int i = 1; i < n; i++) {
        ans = cal(ans, d[i]);
    }
    printf("%d", ans);
}
cs
반응형

'백준' 카테고리의 다른 글

[백준 1212] 8진수 2진수, C++  (0) 2020.01.13
[백준 1373] 2진수 8진수, C++  (0) 2020.01.13
[백준 9613] GCD 합, C++  (0) 2020.01.13
[백준] 2225 - 합분해, C++  (0) 2020.01.13
[백준] 1699 - 제곱수의 합, C++  (0) 2020.01.12
Buy me a coffeeBuy me a coffee

댓글