티스토리 뷰
728x90
반응형
문제 요약
- 알고리즘 분류: 유클리드 호제법
- 난이도: Silver4
- 문제내용:
- 첫 번째 링과 그 뒤의 각 링의 비례 하는 회전 수를 기약 분수 형태로 표현해라.
- 사이트 주소: https://www.acmicpc.net/problem/3036
문제 풀이
1. 문제 접근 방법
이 문제는 회전의 비례를 구해야 한다. 예를 들어 A가 20 바퀴를 돌아가고 B가 12 바퀴 돌아 간다고 가정 한다면 A : B = 20 : 12 = 10 : 6 = 5 : 3 으로 표현 할수있다. 그래서 기약 분수를 구하기 위해서는 두 수의 최대공약수를 구해야 한다.
최대 공약수는 유클리드 호제법으로 풀면 처리 시간이 모든 경우의 수를 구하는 것보다 빠르다. 유클리드 호제법에 대한 내용은 아래의 사이트에서 보면 된다.
https://jih3508.tistory.com/13
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 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- level2
- java
- 알고리즘
- 문자열
- 배열
- Greedy
- DFS
- 파이썬
- 그래프
- Python
- 넓이 우선 탐색
- 이론
- spring-boot
- DP
- 구현
- 재귀호출
- 동적 계획법
- BaekJoon
- 동적계획법
- Programmerse
- 그리디
- 누적합
- 조합
- 백준
- 자바
- LeetCode
- 백트레킹
- JSCODE
- BFS
- 수학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함