코딩테스트/BOJ

[BOJ] 17087 숨바꼭질 6 - JAVA

5월._. 2023. 5. 4.
728x90

1. 문제

 

17087번: 숨바꼭질 6

수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이

www.acmicpc.net

수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다.

수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이동할 수 있다. 수빈이의 위치가 동생이 있는 위치와 같으면, 동생을 찾았다고 한다.

모든 동생을 찾기위해 D의 값을 정하려고 한다. 가능한 D의 최댓값을 구해보자.


2. 풀이

점끼리의 간격을 구해서, 그 간격들의 최대공약수를 구하면 된다. (설명을 더 잘 하고 싶었는데 못하겠다..)

S까지 A 배열에 넣어서 같이 계산했다.

import java.io.*;
import java.util.*;

public class BOJ_17087_숨바꼭질6 {
   public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      StringTokenizer st = new StringTokenizer(in.readLine());
      int N = Integer.parseInt(st.nextToken());
      int[] A = new int[N+1];
      A[0] = Integer.parseInt(st.nextToken());

      st = new StringTokenizer(in.readLine());
      for(int i=1;i<=N;i++) {
         A[i] = Integer.parseInt(st.nextToken());
      }

      int answer = Math.abs(A[0]-A[1]);
      for(int i=2;i<=N;i++) answer = gcd(answer, Math.abs(A[i]-A[i-1]));

      System.out.println(answer);
   }
   public static int gcd(int a, int b){
      if(a<b){
         int tmp = a;
         a = b;
         b = tmp;
      }
      if(b==0) return a;
      return gcd(b,a%b);
   }
}

3. 결과

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 9251 LCS - JAVA  (0) 2023.05.06
[BOJ] 2294 동전 2 - JAVA  (0) 2023.05.05
[BOJ] 16069 붙임성 좋은 총총이 - JAVA  (0) 2023.05.03
[BOJ] 17071 숨바꼭질 5 - JAVA  (0) 2023.05.02
[BOJ] 13913 숨바꼭질 4 - JAVA  (0) 2023.05.01

댓글