cyaninn   2년 전

고등학교 문과출신인 제가

최대한 머리를 굴려봤지만


어떻게 해야 여기서 더 획기적으로 시간을 줄일 수 있을지 모르겠습니다...

수학공식이나 특별한 함수를 사용해야할것같은데

초등학생 수학가르치신다고 생각하고 천천히 설명해주실분 계신가요..? ㅠㅠ

at_dotist   2년 전

대당 가변비용이 b와 대당 이익이 c 라면

대당 순이익을 d로 두면 d = c-b가 됩니다.

d가 0 이하라면 이윤이 절대 날 수 없습니다. 이때는 -1을 출력해 주면 됩니다.

d가 1 이상이라면, 고정 비용 a 를 순이익 d로 나누면 

고정비용을 상쇄하기위해 팔아야할 노트북의 수가 됩니다.

노트북은 1대 단위로 팔수 있으므로, 이를 올림하면 이윤이 나는 노트북의 최소 판매 대수가 됩니다.

하지만 여기서 한가지 더 살펴봐야 하는데, 나눈 값의 나머지가 0이 되는 경우에는

고정비용을 모두 상쇄하기만 했지, 이윤은 나지 않습니다. 이때는 한대를 더 팔아야 하므로, 나눈값에 1을 더해주면 됩니다.

train0113   2년 전

while 함수로 작성을 하셨는데 이에 대하여 최악의 경우를 생각해 봅시다.

A=21억,B=1,C=2을 생각해 보았을때 while 함수는 총 21억번 돌아가게 됩니다.

python의 경우에는 시간을 0.35*3+2=3.05초를 받게 되지만

A=1억,B=1,C=2 정도로 코드를 돌려봐도 제 콘솔 상에서 약 17초 정도가 나왔습니다.

결국 while문을 사용해서는 반드시 시간초과가 난다는 것을 알 수 있습니다.

그렇다면 while문과 같은 반복문 없이 n을 바로 식으로 구해내야 하는 것을 알 수 있습니다.

판매량을 N이라고 한다면 손익분기점은 고정비용 + 가변비용*N < 판매비용*N 이란 것을 알 수 있고

고정비용을 A, 가변비용을 B, 판매비용을 C라고 했을때

A + (B * N) < (C * N),

A < (C - B) * N,

(A / (C - B)) < N 라는 식을 도출해낼 수 있습니다.

그렇다면 우리가 구해야하는 n은 (A / (C - B)) < N <= (A / (C - B))+1를 만족하는 자연수 n임을 알 수 있고,

결국 정답은 int(A/(C-B)+1)임을 알 수 있습니다.

cyaninn   2년 전

캬 목표를 명확히해야 알고리즘이 간결하게 보이는군요 공부가됬어요

at_dotist 님 train0113님 감사합니다!

kwonjoosung   2년 전

아.. 반복문에 너무 의존했네요.. 감사합니다!!

cube7089   2년 전

반복문을 사용하면 안되겠다는 생각은 했는데 사용하지 않고 스스로 구현하는데 막혀서 찾아보다가 이 글을 보게 됐습니다

부등식을 변형했을 뿐인데 반복문을 사용하지 않고 할 수 있다는 게 신기하네요 감사합니다!

qls2463   1년 전

좋아요

kdi2514   1년 전

반복문을 사용안하고 이런식으로도 풀 수 있구나 하고 배워갑니다 감사합니다. 

댓글을 작성하려면 로그인해야 합니다.