프로그래밍/프로그래머스

11/18 FRI 프로그래머스 분수의 덧셈

잠이안와 2022. 11. 18. 14:08

https://azu87.notion.site/11-22-11-18-3d597fc9002b46b2a2812cce2a78ca71

 

https://docs.google.com/spreadsheets/d/1BzoWwQawl0rQIknj3hoypvY5IZ0fw_ebH-dlQ08fVrg/htmlview#

 

 

 

 

계산과학 과제 급하게 하다가 꽃힌 프로그래머스..

백준은 컴파일 에러도 너무 많이 나고 좀 난해?해서 손이 잘 안갔는데 이건 코드만 단순히 쳐도 괜찮고 간단히 테스트케이스들을 돌려볼 수 있어서 너무너무 좋았다. 그러다가 살짝 난관에 봉착했던 문제이다.

 

 

 

최대공약수, 최소공배수를 사용해서 최대한 멍청하게 코드를 짜봤는데.... 조금 더 고민하면 코드를 줄일 수는 있을 것 같은데 귀찮아서 패스 ..... GCD, LCM 코드는 꽤 유용한 것 같으니 어떻게 짰었는지 대충은 머리속에 두자!!

 

 

object Solution {
def LCM(a:Int, b:Int):Int ={
  if(b>a) LCM(b,a)
  else{
    def qwe(start:Int):Int ={
      if(start == a*b) a*b
      else {
        if((start%a ==0) && (start%b==0)) start
        else qwe(start+1)
      }}
    qwe(a)
  }
}
def GCD(a:Int,b:Int):Int={
  if(b>a) GCD(b,a)
  else{
    def qwe(start: Int): Int = {
      if (start == 1) 1
      else {
        if ((a%start == 0) && (b % start == 0)) start
        else qwe(start - 1)
      }
    }
    qwe(b)
}}


def solution(denum1: Int, num1: Int, denum2: Int, num2: Int): Vector[Int] = {
  val new_num:Int = LCM(num1,num2)
  val new_denum:Int =denum1*(new_num/num1) + denum2*(new_num/num2)
  val my_GCD:Int = GCD(new_denum,new_num)
  if(my_GCD==1) Vector(new_denum,new_num)
  else Vector(new_denum/my_GCD,new_num/my_GCD)
}

}