Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Git
- hackerrank
- dacon
- 더현대서울 맛집
- github
- programmers
- 편스토랑
- Docker
- PYTHON
- 맥북
- ubuntu
- Baekjoon
- 편스토랑 우승상품
- Kaggle
- ChatGPT
- 프로그래머스
- 프로그래머스 파이썬
- AI 경진대회
- 백준
- 코로나19
- 데이콘
- SW Expert Academy
- 자연어처리
- leetcode
- 우분투
- 캐치카페
- Real or Not? NLP with Disaster Tweets
- 금융문자분석경진대회
- gs25
- 파이썬
Archives
- Today
- Total
솜씨좋은장씨
[BaekJoon] 1735번 : 분수 합 (Python) 본문
728x90
반응형
코딩 1일 1문제! 오늘의 문제는 백준의 분수 합 입니다.
👨🏻💻 문제 풀이
이 문제는 최소 공배수와 최대 공약수를 활용하여 풀었습니다.
이에 먼저 파이썬의 기본 내장 라이브러리인 math의 gcd를 활용하여 최대 공약수와 최소공배수를 구해주는 함수를 먼저
만들어주었습니다.
def LCM(N, M):
return N*M // gcd(N, M)
def GCD(N, M):
return gcd(N, M)
그 다음 예제 입력을 참고하여 분수 2개를 입력 받았습니다.
frac1 = list(map(int, input().split()))
frac2 = list(map(int, input().split()))
print(fraction_sum(frac1, frac2))
입력을 받은 뒤에
numerator1, denominator1 = frac1[0], frac1[1]
numerator2, denominator2 = frac2[0], frac2[1]
각각 분자, 분모로 나누어 주었습니다.
lcm = LCM(denominator1, denominator2)
이렇게 입력받은 분모 2개를 활용하여 분모의 최소 공배수를 구합니다.
ext_1, ext_2 = lcm // denominator1, lcm // denominator2
분모를 최소공배수로 바꾸었을때 분자에도 곱해줄 값을 구하기 위해서 각각 최소공배수 // 분모 값으로 그 값을 구해줍니다.
numerator1, numerator2 = numerator1 * ext_1, numerator2 * ext_2
구한 값을 각각 분자에 곱해준 뒤에
ans_numerator, ans_denominator = numerator1 + numerator2, lcm
두개를 더해서 정답 분자 값으로 아까 구해뒀던 최소공배수 값을 정답 분모 값으로 지정합니다.
그런데! 우리는 더이상 약분이 되지 않는 기약분수 형태로 정답을 내 놓아야하므로
gcd = GCD(ans_numerator, ans_denominator)
if gcd != 1:
ans_numerator = ans_numerator // gcd
ans_denominator = ans_denominator // gcd
분모와 분자의 최대 공약수의 값이 1이 아닐 경우
각각 분모와 분자에서 최대 공약수 값을 나눈 뒤 이를 정답으로 사용합니다.
f"{ans_numerator} {ans_denominator}"
마지막으로 정답을 f-string으로 만들어주면 끝!
전체 코드는 아래를 참고해주세요.
👨🏻💻 코드 ( Solution )
from math import gcd
def LCM(N, M):
return N*M // gcd(N, M)
def GCD(N, M):
return gcd(N, M)
def fraction_sum(frac1, frac2):
numerator1, denominator1 = frac1[0], frac1[1]
numerator2, denominator2 = frac2[0], frac2[1]
lcm = LCM(denominator1, denominator2)
ext_1, ext_2 = lcm // denominator1, lcm // denominator2
numerator1, numerator2 = numerator1 * ext_1, numerator2 * ext_2
ans_numerator, ans_denominator = numerator1 + numerator2, lcm
gcd = GCD(ans_numerator, ans_denominator)
if gcd != 1:
ans_numerator = ans_numerator // gcd
ans_denominator = ans_denominator // gcd
return f"{ans_numerator} {ans_denominator}"
if __name__ == "__main__":
frac1 = list(map(int, input().split()))
frac2 = list(map(int, input().split()))
print(fraction_sum(frac1, frac2))
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[BaekJoon] 11021번 : A+B - 7 (Python) (0) | 2021.12.08 |
---|---|
[BaekJoon] 9076번 : 점수 집계 (Python) (0) | 2021.12.07 |
[BaekJoon] 2752번 : 세수정렬 (Python) (0) | 2021.12.05 |
[BaekJoon] 2910번 : 빈도 정렬 (Python) (0) | 2021.12.04 |
[BaekJoon] 11659번 : 구간 합 구하기 4 (Python) (0) | 2021.12.03 |
Comments