-
[백준] 링 - 3036번알고리즘 문제 풀이/백준 2021. 3. 1. 13:02
문제설명
3036번: 링
출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다.
www.acmicpc.net
기본아이디어
문제를 읽고 12 / 3 -> 4 / 1, 12 / 8 -> 3 / 2 로 바꿔주는 작업이 필요하다고 생각이 들었고, 그때 필요한 두 값을 나누는 값은 두 값의 최대공약수라는 점을 파악했다. 그래서 두 값을 매개변수로 최대공약수를 리턴해주는 함수를 만들어서 사용했다. 알고리즘은 유클리드 호제법을 기반해서 만들어졌다.
<유클리드 호제법 간단 요약> 결과는 성공!
구현코드
123456789101112131415161718192021222324252627public static void main(String[] args) throws IOException {int N = Integer.parseInt(input.readLine());int[] rings = new int[N];StringTokenizer str = new StringTokenizer(input.readLine());for(int i = 0; i < N; i++){rings[i] = Integer.parseInt(str.nextToken());}for(int i = 1; i < N; i++)makeBunSu(rings[0], rings[i]);System.out.println(output);}static void makeBunSu(int A, int B){int GCD = makeGCD(A, B);output.append((A/GCD) + "/" + (B/GCD) + "\n");}static int makeGCD(int A, int B){int a = Math.max(A, B);int b = Math.min(A, B);while(b > 0) {int temp = a % b;a = b;b = temp;}return a;}cs 정리, 기억할내용
1. 유클리드 호제법 ( 두 값의 최대공약수는 두 값중 큰 값을 작은 값으로 나눈 나머지와 작은 값의 최대공약수와 같다.)
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
[백준] Generations of Tribbles - 9507번 (0) 2021.03.04 [백준] 패션왕 신해빈 - 9375번 (0) 2021.03.02 [백준] 수들의 합 2 - 2003번 (0) 2021.03.01 [백준] 토너먼트 - 1057번 (0) 2021.03.01 [백준] 에디터 - 1406번 (0) 2021.02.28