본문 바로가기
알고리즘/BOJ

[BOJ] 3036번 링 / 사용언어 : 파이썬(python)

by 바른 호랑이 2021. 12. 21.
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
반응형

댓글