728x90
반응형
※ 문제링크
3036번: 링
출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다.
www.acmicpc.net
※ 관련 개념
유클리드 호제법 - 위키백과, 우리 모두의 백과사전
유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로(互) 상대방 수를
ko.wikipedia.org
이번 문제는 최소공약수를 통해 문제를 해결하는 문제였다. 문제를 풀기 위해서는 반지름으로 원의 둘레를 구하는 방법을 알아야했다. 원의 둘레는 반지름에 2를 곱하고 𝝅를 추가적으로 곱해주면 구할 수 있다. (𝝅는 어차피 분해시킬 수 있기에 따로 반영하지 않았다.) 문제를 푼 방식과 코드는 아래와 같다.
1. 입력받은 숫자로 리스트를 만든 후 리스트 요소들에 전부 2를 곱해준다.
2. 유클리드 호제법을 활용하여 최소공약수를 구한다음 각각 결과값을 산출하고 출력해준다.
+ 출력값은 시간 단축을 위해 sys함수를 활용하였다.
def euclid(num1, num2):
if num1 > num2:
num3 = num1 % num2
if num3 == 0:
return num2
else:
result = euclid(num2, num3)
return result
else:
num3 = num2 % num1
if num3 == 0:
return num1
else:
result = euclid(num1, num3)
return result
import sys
N = int(input())
circle_list = list(map(int, input().split()))
for i in range(N):
circle_list[i] = circle_list[i] * 2
for i in range(1, N):
gcd = euclid(circle_list[0], circle_list[i])
if i == N-1:
sys.stdout.write(f'{int(circle_list[0]/gcd)}/{int(circle_list[i]/gcd)}')
else:
sys.stdout.write(f'{int(circle_list[0]/gcd)}/{int(circle_list[i]/gcd)}\n')
P.S 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.
728x90
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 1676번 팩토리얼 0의 개수 / 사용언어 : 파이썬(python) (0) | 2021.12.22 |
---|---|
[BOJ] 11051번 이항 계수2 / 사용언어 : 파이썬(python) (0) | 2021.12.21 |
[BOJ] 2981번 검문 / 사용언어 : 파이썬(python) (0) | 2021.12.20 |
[BOJ] 2609번 최대공약수와 최소공배수 / 사용언어 : 파이썬(python) (0) | 2021.12.19 |
[BOJ] 14889번 스타트와 링크 / 사용언어 : 파이썬(python) (0) | 2021.12.19 |
댓글