되게 힘들고 멍청한 방법으로 풀었다.

근데 나중에 생각해보니까 기약분수는 최대공약수로 나누면 쉽게 만들 수 있다는걸 깨달았다

고로 멍청한 방법 1 과 현명한 방법 2를 소개한다.


https://www.acmicpc.net/problem/3036

 

3036번: 링

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

www.acmicpc.net


1.

import sys
import fractions
import copy
input = sys.stdin.readline


N = int(input())
A=list(map(int,input().split()))
B=copy.deepcopy(A)

for i in range(1,N):

    if A[0] % A[i] ==0:
         A[0] = int(A[0]/A[i])
         A[i] = int(A[i]/A[i])
         print(f'{A[0]}/{A[i]}')
         A[0]=B[0]
         

    else:
        print(fractions.Fraction(A[0],A[i]))

 

2.

import sys
import math
input = sys.stdin.readline


N = int(input())
A=list(map(int,input().split()))
for i in range(1,N):
     g=math.gcd((A[0]),A[i])
     qnswk =int(A[0] / g)
     qnsah =int(A[i] / g)
     print(f'{qnswk}/{qnsah}')
         
         
   
1번 방법의 핵심은 깊은복사(deepcopy)이다. 단순하게 A=B 형태로 복사하면 얕은복사(Shallow Copy)가 이루어져 원본 데이터에도 영향이 있어서 복사를 하나마나 한 결과를 도출한다. 고로 copy 모듈을 이용해서 깊은복사를 하는게 포인트이다. 그치만 멍청하고 돌아가는 방법이니까 이렇게 하지는 않기를 강력 권장한다.
 
2번 방법의 핵심은 기약분수를 어떻게 만드느냐인데, 최대공약수로 나눠주면 된다.
 

'취준 > 백준' 카테고리의 다른 글

9375 - 파이썬  (0) 2022.05.09
11051 - 파이썬  (0) 2022.05.06
2981 - 파이썬  (0) 2022.05.05
9184 - 파이썬  (0) 2022.05.03
1003 - 파이썬  (0) 2022.05.03

+ Recent posts