-
백준 17087 숨바꼭질 6 문제풀이 ( Java )Problem Solving/Java 2019. 10. 22. 21:25반응형12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849public class Main {static int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));// reader writer 생성String[] info = br.readLine().split(" ");// info[0]에 N / info[1]에 SString[] temp = br.readLine().split(" ");int[] distance = new int[temp.length];for (int i = 0; i < temp.length; i++) {if (Integer.parseInt(temp[i]) > Integer.parseInt(info[1])) {distance[i] = Integer.parseInt(temp[i]) - Integer.parseInt(info[1]);} else {distance[i] = Integer.parseInt(info[1]) - Integer.parseInt(temp[i]);}}int brothersCnt = Integer.parseInt(info[0]);int answer = distance[0];if (brothersCnt != 1) {// 동생이 한명이 아니면 최대 공약수를 구한다for (int i = 1; i < distance.length; i++) {answer = gcd(answer, distance[i]);}}}}
이건 솔직히 문제를 좀 모호하게 적어놨다
D가 수빈이가 한번에 움직일 수 걸음의 보폭(?) 이다
예를 들어 4면 4 , 8 , 12 , 16... 이런 식으로만 움직일 수 있고, 5면 5, 10, 15 ,20 .. 이런 식으로만 움직일 수 있다
이 점만 명확해지면 최대 공약수로 풀 수 있다.
여러개의 최대공약수도 결국은 두 수의 최대 공약수를 구하는 것과 같다
예를 들어 a, b , c ,d 가 있다고 치면
a와 b의 최대공약수와 c 사이의 최대 공약수를 구해서 그것과 d의 최대 공약수를 구하면
a, b, c, d의 최대 공약수가 나온다
반응형'Problem Solving > Java' 카테고리의 다른 글
백준 2748번 피보나치 수열 동적계획법 활용 2가지 풀이 ( Java ) (0) 2019.10.24 백준 17103 골드바흐 파티션 문제풀이 ( Java ) (0) 2019.10.22 백준 9613 GCD합 문제 풀이 ( Java ) (0) 2019.10.22 백준 1676번 팩토리얼 0의 개수 문제 풀이 ( Java ) (0) 2019.10.22 백준 10872번 팩토리얼 문제풀이 ( Java ) (0) 2019.10.22