코딩 테스트/Level 0

분수의 덧셈

컴닥 2022. 11. 8. 15:52
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/120808

파이썬

gcd (최대공약수)

import math


def solution(denum1, num1, denum2, num2):
    denum = denum1 * num2 + denum2 * num1
    num = num1 * num2
    gcd = math.gcd(denum, num)
    return denum // gcd, num // gcd

여러 결과들을 동시에 리턴할 때 파이썬은 tuple로 묶어서 전송한다.
프로그래머스의 API는 json을 이용해 답을 확인하기 때문에 튜플과 리스트를 구분하지 않는다.  
위 코드도 통과되지만 정확하게 작성하는 것이 좋을 것 같다.

 

fractions(분수) 라이브러리를 이용하면...

from fractions import Fraction


def solution(denum1, num1, denum2, num2):
    result = Fraction(denum1, num1) + Fraction(denum2, num2)
    return result.numerator, result.denominator

 

코틀린

class Solution {
    fun solution(numer1: Int, denom1: Int, numer2: Int, denom2: Int): IntArray {
        val answer: IntArray = intArrayOf(numer1 * denom2 + numer2 * denom1, denom1 * denom2)
        var euclid = answer.clone()
        while (euclid[1] > 0) {
            if (euclid[0] >= euclid[1])
                euclid[0] %= euclid[1]
            euclid = euclid.reversed().toIntArray()
        }
        return answer.map { it / euclid[0] }.toIntArray()
    }
}
반응형