PS알못 OrbitHv의 PS logo PS알못 OrbitHv의 PS

태그:

16. 정수론 및 조합론

첫 번째 링을 돌릴 때 나머지 링이 얼마나 돌아가는지 구하는 문제입니다. 링의 회전 횟수를 구하는 방법은 돌리려는 링을 1바퀴 돌릴 때 얼만큼의 회전 거리를 전달하는지 구하는 것입니다. 반지름이 1인 링이 한 바퀴 돌 때 2π의 회전 거리를 전달하는데, 2π는 무시하고 1 단위 거리라고 하겠습니다. 회전 거리는 링의 둘레와 같아서 반지름에 비례해서 늘어납니다. 따라서 반지름 R인 링이 1바퀴 돌 때 R 단위의 회전 거리를 전달합니다. 문제에서 다른 링들은 모두 첫 번째 링과 직/간접적으로 접촉해있기 때문에 같은 회전 거리를 전달받습니다. 만약 반지름 r인 링이 R의 회전 거리를 받았다면 몇 바퀴를 돌지 구하는 것은 비례식으로 구할 수 있습니다. 원래 r의 회전 거리로 1바퀴 돌던 링에 R의 회전 거리가 주어지면 1:r=x:R이 되고, x=R/r로 구할 수 있습니다. 이제 이 사실을 문제에 대입하면 모든 링에 첫 번째 링의 반지름인 R만큼의 회전 거리가 전달될 때, 각 링에 대해 R/r가 회전 횟수가 됩니다. 그런데 이 값을 기약분수로 출력하라는 조건이 있습니다. 이는 분수를 만든 후, 분모와 분자의 최대공약수를 구해 나눠주면 됩니다. 이렇게 처리한 후 각각의 경우에 대해 출력하면 됩니다.

소스 코드

언어 코드 시간
Python 3 코드(Github) / 코드(백준) 2020-04-02 12:11:59