문제:

상근이는 창고에서 링 N개를 발견했다. 상근이는 각각의 링이 앞에 있는 링과 뒤에 있는 링과 접하도록 바닥에 내려놓았다. 

상근이는 첫 번째 링을 돌리기 시작했고, 나머지 링도 같이 돌아간다는 사실을 발견했다. 나머지 링은 첫 번째 링보다 빠르게 돌아가기도 했고, 느리게 돌아가기도 했다. 이렇게 링을 돌리다 보니 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 도는지 궁금해졌다.

링의 반지름이 주어진다. 이때, 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 돌아가는지 구하는 프로그램을 작성하시오,

입력:

첫째 줄에 링의 개수 N이 주어진다. (3<=N<=100)

다음 줄에는 링의 반지름이 상근이가 바닥에 놓은 순서대로 주어진다. 반지름은 1과 1000을 포함하는 사이의 자연수이다.

출력:

출력은 총 N-1 줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다.

풀이 방법:

 모든 링은 첫 번째 링의 크기에 따라서 돌아가는 횟수가 정해지게 된다. 예제의 경우로 보면 첫 번째 링이 12이므로 두 번째 링은 12/3 인 4이고, 세 번째 링은 12/8=3/2, 마지막 링은 12/4 이므로 3이 되게 된다. 

python에서는 이러한 분수 약분 및 계산을 해주는 fraction이라는 모듈이 있다. 따라서 첫 번째 링을 기준으로 나머지 링에 대해 분수형태로 만들면 된다. 하지만 정수인 경우에도 분수 형태로 만들어 줘야 하는 작업이 필요하므로, 따로 분류해서 만들어주도록 한다.

1
2
3
4
5
6
7
8
9
from fractions import Fraction
a=int(input())
number=list(map(int,input().split()))
for i in range(1,len(number)):
    result=Fraction(number[0],number[i])
    if int(result)==result:
        print(str(result)+"/"+"1")
    else:
        print(str(result))
cs


'Algorithm > Python' 카테고리의 다른 글

[BOJ]1547. 공  (0) 2019.05.15
[BOJ]10253. 헨리  (0) 2019.05.14
[BOJ]2591. 이항 쇼다운  (0) 2019.05.12
[BOJ]2407. 조합  (0) 2019.05.11
[BOJ]1676. 팩토리얼 0의 개수  (0) 2019.05.10

+ Recent posts