되게 힘들고 멍청한 방법으로 풀었다.
근데 나중에 생각해보니까 기약분수는 최대공약수로 나누면 쉽게 만들 수 있다는걸 깨달았다
고로 멍청한 방법 1 과 현명한 방법 2를 소개한다.
https://www.acmicpc.net/problem/3036
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 |