ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 17087 - 숨바꼭질 6
    백준 algorithm 2020. 3. 18. 18:27

    문제 설명 

     

     

    => 나( S )가 갈 수 있는 곳은  ( S + D ) or ( S - D ) 이다. 

    => 내가 Y에 가기 위해서는 Y-S 의 절대값이 D의 배수가 되어야한다. 

    => 내가 Z에 가기 위해서는 Z-S 의 절대값이 D의 배수가 되어야한다. 

    => 모든 Y-S , Z-S 값들의 최대 공약수를 구하면 된다. 

     

    ex ) S : 3
    동생들 위치 : 

    1 7 11

    이 경우 최대공약수를 구해야할 수들은

    2 4 8

    가 된다. 

     

    *** 배열을 사용할 때 잘못된 index에 접근하거나, 0으로 나누는 경우가 없도록 주의해야한다. (런타임 에러)

     

     

     

     

     

    #include <iostream>
    #include <stack>
    #include <string>
    #include <vector>
    using namespace std;
    
    long GCD (long A, long B)
    {
        while(B!=0)
        {
            long tmp=B;
            B=A%B;
            A=tmp;
        }
        return A;
    }
    
    int main()
    {
        ios_base::sync_with_stdio(false);
        cin.tie(nullptr);
        cout.tie(nullptr);
        
        long N, S;
        cin >> N >> S;
        
        vector<long> arr(N);
     
        for(long i=0; i< N; i++)
        {
            cin>>arr[i];
            long tmp = S-arr[i];
            if( tmp > 0)
            {
                arr[i] = tmp;
            }
            else{
                arr[i] = -tmp;
            }
        }
        
        for(long i=0; i< N-1; i++)
        {
            arr[i+1]= GCD(arr[i], arr[i+1]);
        }
        
        cout << *(arr.end()-1)<<'\n';
        return 0;
    }
    

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

    백준 17103 - 골드바흐 파티션  (0) 2020.03.26
    백준 1152 - 단어의 개수  (0) 2020.03.18
    백준 17299 - 오등큰수  (0) 2020.03.18
    백준 14681 - 사분면 고르기  (0) 2020.03.17
    백준 6588 - 골드바흐의 추측  (0) 2020.03.16

    댓글

Designed by Who.