Skip to content

592. Fraction Addition and Subtraction #145

@zeikar

Description

@zeikar

Problem link

https://leetcode.com/problems/fraction-addition-and-subtraction/

Problem Summary

분수들의 식이 주어질 때 계산하는 문제

Solution

스트링 파싱 후 계산하면 된다.
초등학교 때 배운 분수의 덧셈 그대로 구현하면 되는데 분모는 최소공배수로 맞추고 분자끼리 더한 후 최대공약수로 분자와 분모를 각각 나눠주면 된다.

정규표현식으로 파싱이 깔끔하게 되는거 같은데 난 무식하게... 하나씩 파싱했다 ㅋㅋ

Source Code

class Solution:
    def fractionAddition(self, expression: str) -> str:
        sign = 1
        n = 0
        numerators, denominators = [], []
        if expression[0] == "-":
            sign = -1
            expression = expression[1:]

        for e in expression:
            if e == "-" or e == "+":
                denominators.append(n)
                n = 0

                if e == "-":
                    sign = -1
                else:
                    sign = 1
            elif e == "/":
                numerators.append(sign * n)
                n = 0
            else:
                n *= 10
                n += int(e)
        denominators.append(n)

        denominator = 1
        g = 1
        for d in denominators:
            g = gcd(g, d)
            denominator *= d
        denominator //= g

        numerator = 0
        for i in range(len(numerators)):
            numerator += numerators[i] * (denominator // denominators[i])
        g = gcd(numerator, denominator)
        return f"{numerator//g}/{denominator//g}"

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions