문제를 보고 제일 먼저 든 생각은 기약분수를 먼저 구해야 한다는 생각이 들었다. 기약분수를 구하기 위해서는 두 수의 최대 공약수가 필요하다고 생각했고, 최대 공약수를 구하는 공식을 알아야 했다. 최대 공약수를 구하기 위해 1부터 하나씩 분자와 분모에 나눠줬고,둘다 나머지가 0일때 공약수라고 생각을 해서 for문을 이용해서 공약수를 계속 변수에 저장해주었고for문이 다 끝났을때에는 최대 공약수가 되어있도록 코드를 짰다. 그리고 그 다음은 유한소수를 구해줘야 하는데 이부분에서 조금 어려웠다. 제한사항인 1000언저리에서 자꾸 유한소수인데 무한소수라고 출력이 되는 바람에 한참 헤메다가 while문을 썼더니 해결이 되었다.
def solution(a, b):
answer = 0
최대공약수 = 0
# 최대공약수 구하기
for x in range(1, a + 1):
if a % x == 0 and b % x == 0:
최대공약수 = x
print(f'최대공약수 : {최대공약수}')
a = a // 최대공약수
b = b // 최대공약수
print(f'a:{a} b:{b}')
n = b
# 유한 소수 구하기
while n % 2 == 0:
n = n // 2
print(f'2로 나눈 n: {n}')
while n % 5 == 0:
n = n // 5
print(f'5로 나눈 n: {n}')
if n == 1:
answer = 1
else:
answer = 2
print(f'answer 의 값 : {answer}')
return answer
다른사람의 코드 :
from math import gcd
def solution(a, b):
b //= gcd(a,b)
while b%2==0:
b//=2
while b%5==0:
b//=5
return 1 if b==1 else 2
더 공부할 내용
파이썬 Math 내장함수
https://codingpractices.tistory.com/46
for문과 while문의 차이점
https://chaeyoung2.tistory.com/67
느낌점
처음 알고리즘을 공부할때만 해도 한문제도 못풀어서 절망했었는데
매일매일 꾸준히 풀다보니까 어느새 쉬운 단계는 스스로 생각해서 풀 수 있게 되었다.
역시 알고리즘은 꾸준히 하는게 중요하다고 느꼈다.
요즘 알고리즘 스터디를 하면서 다른 사람들의 코드를 비교해보고 내가 풀지 못한 문제를 함께 고민하고
코드윗미 등을 통해서 함께 풀 수 있도록 도와주고 하다보니까 실력이 많이 향상된 것 같다.