-
[17087] 숨바꼭질-6 -Java알고리즘 연습 2022. 2. 23. 16:12
1. 문제
https://www.acmicpc.net/problem/17087
17087번: 숨바꼭질 6
수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이
www.acmicpc.net
2. 풀이
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; // 1. Read N, S, As st = new StringTokenizer(br.readLine(), " "); int N = Integer.parseInt(st.nextToken()); long S = Long.parseLong(st.nextToken()); st = new StringTokenizer(br.readLine(), " "); long maxD = 0; // 2-1. If N == 1 if(N == 1) { // 3-1. Find maxD maxD = Math.abs(S - Long.parseLong(st.nextToken())); // 4-1. Print the answer System.out.println(maxD); return; }else { // 2-2. Put Ds to array long [] distances = new long[N]; for(int i = 0; i < N; i++) { distances[i] = Math.abs(S - Long.parseLong(st.nextToken())); } // 3-2. Find max D (finding GCD of distances) maxD = findMaxD(distances[0], distances[1]); // the answer should be Greatest Common Disisor of all Ds for(int i = 2; i < N ; i++) { maxD = findMaxD(maxD, distances[i]); } // 4-2. Print the answer System.out.println(maxD); } } public static long findMaxD(long a, long b) { if(a % b == 0) { return b; }else { return findMaxD(b, a % b); } } }
3. 배운점
4. 개선할 점
풀이 오류 지적, 다른 접근법 공유, 그 밖에 질문 등 모든 의견을 환영합니다.
'알고리즘 연습' 카테고리의 다른 글
[9095] 1,2,3 더하기 - Java (0) 2022.03.09 [1463] 1로 만들기 - Java (0) 2022.03.08 [9613] GCD 합 - Java (0) 2022.02.23 [1874] 스택 수열 - Java (0) 2022.02.22 [17299] 오등큰수 - Java (0) 2022.02.21