본문 바로가기

카테고리 없음

[Codewars] 기울기

* 기울기



동생은 엑스 형은 와이 다.

와이는 엑스 보다 용돈을 매 달 일정한 배수 만큼의 용돈을 더 받는다.


3 배 더 받는경우

- 엑스가 300 원 받으면 와이는 900 원

- 엑스가 400 원 받는 달은 와이는 1200 원


그런데 와이가 용돈이 적다고 불만이 많아 받은 금액에서 일정한 액수의 돈을 더 주기로 했다.


100 원 더 준다면

위 예에서는 1000 원 , 1300 원을 받게 된다.


엑스는 와이가 자기보다 용돈을 몇 배 더 받는지가 궁금했지만 형은 가르쳐 주지 않아 이렇게 질문을 했다.

엑스 "그러면 형님아 지난 달에 얼마를 , 이 번달에 얼마를 받았는지만 가르쳐 주"

와이 " 가르쳐 줄테니 몇 배 더 받는지는 알려고 하지마!!!"

엑스는 다음의 아이디어로 몇 배를 더 받는지를 알고자 한다.


"비가 같은 것 끼리 빼고 , 더하면 비가 같다 . 그런데 이 경우 빼 버리면 얹어 주는 돈이 없어지니 원하는 결과를 얻을 수 있다"

입력

동생과 형의 받는 용돈 두 번의 금액이 입력으로 주어진다.

출력

몇 배가 되는지를 출력한다. 정수배가 된다는 것은 보장된다.

입출력 예

입력
300  1000
400  1300
출력
3  100



사실 문제 이름이 왜 기울기 인지는 모르겠지만 비례식을 이용해야하는 문제!

비례식의 법칙 x1 : y1 = x2 : y2 를 이용하면 된다.


근데 x1(동생) 보다 y1(형) 이 항상 몇배씩 증가하는 경우만 있는 것이 아니라

배수로 증가 된 후 일정 금액을 더해주는 경우가 있기 때문에 

그 금액만큼을 빼주어야 비례식이 성립하게된다.


추가된 금액을 x 라고 두면, 

x1 : (y1-x) = x2 : (y2-x) 가 성립되고 

x1 * (y2-x) = x2 * (y1-x) 의 식을 도출할 수 있게 된다.   

결국, x = ((x1*y2)-(x2*y1)) / (x1-x2)  의 값을 가지게 된다.


그런데!!...아무리 생각해도 맞는 풀이인데 숫자가 큰경우에 답이 나오지 않아 정말로 몇시간을 고민했는지 모른다...

이유는 큰수들끼리 곱했을 경우 int형의 범위를 벗어나기 때문이었다.

그래서 x1 과  y2 를 계산하기전에 x1 을 int 형으로 미리 변환시켜 준 후 자동 형변환 되어 계산되도록 하였다!

문제 해결