티스토리 뷰

알고리즘/BOJ

[백준] 17087 숨바꼭질 6

세진짱 2020. 2. 2. 15:31

 

나의 위치가 S고 Ai의 위치로 갈 수 있는 최대의 D를 구하는 문제다

그럼 처음 입력 받으면서 Ai들과 S의 입력 차를 넣어두고 최대공약수를 구하면 된다

 

최대 공약수를 구하는건 그냥 N으로 찾을 수 있는데 이걸 이분탐색으로 하고 

정렬해서 풀고 하다가 계속 틀렸다

 

그냥 쉽게 N번 보면되는걸...!

 

어쨌뜬 모든 거리의 차는 x*D의 형태로 나오고 최대공약수 D를 찾으면 되므로

gcd를 사용하자!

 

소스코드

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
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
int n,s,ans;
vector<int> vt;
 
int gcd(int x,int y){
    if(!y) return x;
    return gcd(y,x%y);
}
 
int main(){
    scanf(" %d %d",&n,&s);
    for(int i=0;i<n;i++){
        int k; scanf(" %d",&k);
        vt.push_back(abs(k-s));
    }
    ans = vt[0];
    for(int i=1;i<vt.size();i++){
        ans = gcd(ans,vt[i]);
    }
    printf("%d\n",ans);
}
 
 

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

[백준] 16988 Baaaaaaaaaduk2 (Easy)  (0) 2020.02.02
[백준] 17071 숨바꼭질 5  (0) 2020.02.02
[백준] 16987 계란으로 바위치기  (0) 2020.02.02
[백준] 16986 인싸들의 가위바위보  (0) 2020.02.02
[백준] 1103 게임  (0) 2020.02.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함