728x90
반응형
문제 요약
- 알고리즘 분류: 유클리드 호제법
- 난이도: Silver4
- 문제내용:
- 첫 번째 링과 그 뒤의 각 링의 비례 하는 회전 수를 기약 분수 형태로 표현해라.
- 사이트 주소: https://www.acmicpc.net/problem/3036
3036번: 링
출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다.
www.acmicpc.net
문제 풀이
1. 문제 접근 방법
이 문제는 회전의 비례를 구해야 한다. 예를 들어 A가 20 바퀴를 돌아가고 B가 12 바퀴 돌아 간다고 가정 한다면 A : B = 20 : 12 = 10 : 6 = 5 : 3 으로 표현 할수있다. 그래서 기약 분수를 구하기 위해서는 두 수의 최대공약수를 구해야 한다.
최대 공약수는 유클리드 호제법으로 풀면 처리 시간이 모든 경우의 수를 구하는 것보다 빠르다. 유클리드 호제법에 대한 내용은 아래의 사이트에서 보면 된다.
https://jih3508.tistory.com/13
유클리드 호제법(Euclidean algorithm)
이론 1. 유클리드 호제법이란? 두 개의 정수 혹은 다수의 자연수에서 최대공약수를 구하는 알고리즘이다. 원리는 두 수가 서로 나눠서 나머지를 구한다. 만약 나머지가 0이면 그 수가 최대 공약
jih3508.tistory.com
2. 문제 푸는 방법
- 첫번째 숫자 외 그 뒤의 숫자들의 최대공약수를 구한다.
- 첫번째 숫자와 각 숫자를 나눈다.
CODE
Python
import math
size = int(input())
numbers = list(map(int, input().split()))
basic_number = numbers[0]
for number in numbers[1:]:
gcd = math.gcd(basic_number, number)
print(str(basic_number // gcd) + "/" + str(number // gcd))
Java
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));
int size = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] numbers = new int[size];
for(int i = 0; i < size; i++) {
numbers[i] = Integer.parseInt(st.nextToken());
}
int basic_number = numbers[0];
for(int i = 1; i < size; i++) {
int gcd = GCD(basic_number, numbers[i]);
System.out.println((basic_number / gcd) + "/" + (numbers[i] / gcd));
}
}
// 최대 공약수 구하는 함수
public static int GCD(int x, int y) {
int r;
while(x % y != 0) {
r = x % y;
x = y;
y = r;
}
return y;
}
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[BAEKJOON] 1149 RGB거리 (1) | 2022.09.26 |
---|---|
[BAEJOON] 1043 거짓말 (0) | 2022.09.25 |
[BAEKJOON] 2981 검문 (0) | 2022.09.22 |
[BAEJOON] 1934 최소공배수 (0) | 2022.09.21 |
[BAEKJOON] 24060 알고리즘 수업 - 병합 정렬 1 (1) | 2022.09.19 |