[백준, JAVA] 17087번 : 숨바꼭질 6

seunguk noh·2023년 7월 26일
1

Algorithm

목록 보기
3/23

1. 문제

2. 아이디어

  • 위치가 같으면 찾았다 : (보폭) D의 약수와 배수 개념을 활용해야겠다.
  • 나눗셈의 편의를 위해 원점으로 평행이동 (-S) 시키고, 음수 처리를 위해 절댓값을 취한다.

3. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.StringTokenizer;

public class BOJ_1_17087 {
	public static void main(String[] args) throws IOException  {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 
		StringTokenizer st = new StringTokenizer(bf.readLine());
		int N = Integer.parseInt(st.nextToken());
		int S = Integer.parseInt(st.nextToken()); 
		int[] arr = new int[N];
		st = new StringTokenizer(bf.readLine());
		
		for(int i =0; i<N; i++) {
			arr[i]= Integer.parseInt(st.nextToken());
			arr[i]=Math.abs(arr[i]-S);
		}
		
		int D = arr[0];
		
		for (int i = 0; i < N; i++) {			
			 D = findD(D, arr[i]);
		}
		
		System.out.println(D);
		
	}
	
	public static int findD(int a, int b){
		if(a%b==0) return b;
		return findD(b,a%b);
	}
	
}

4. 느낀점

  • 수학적으로 사고하는 느낌이 들어서 재미있었다.

  • 모호할 땐 직접 그림을 그려보는 것이 좋다!

0개의 댓글