BOJ 1712 : 손익분기점

Ok Haeeun·2022년 12월 21일
0

Go로 algorithm문풀

목록 보기
11/16

문제는 요렇고
입출력 예제에서 알 수 있듯이,
저렇게 입력값 그리고 계산되어 나오는 출력값이 클 수 있다는 것은 하나하나 for문으로 돌리는 방식은 사용하지 말라는 것이다..!!(풀고 깨달음)

그래서 이 문제에서 고려해야 할 것은 두 가지가 있다고 말할 수 있다.

첫번째는 시간 문제

두번째는 방정식을 통해 값을 도출할 때 0으로 나누는 데에서 오는 오류 이슈

를 해결하는 것이 이 문제의 관건이라고 할 수 있다.

첫 시도(for문)

첫 시도는 for문을 이용한 것이었는데, 당연히 시간 초과가 나왔다. 문제에서는 21억으로 제한을 두어 for문에서의 인수에 제한을 줄 수 있었지만, 사실 그런 접근은 이미 답을 알고 있다는 것이기 때문에 올바른 방식이 아니다.

일반화를 시켜주는 것이 먼저라고 생각하여 방정식으로 적어보았고,

a + (b*개수) < (c*개수)

라는 단순한 식에서 전개 및 동류항 처리하여

a + (b-c) * 판매개수 < 0

일 경우에 해당되는 판매개수가 답이 될 것이라 생각했다.

판매개수는 (-1)*a/(b-c)보다 크면 되는 것이므로 1을 더하여

판매개수 = (-1)*a/(b-c)+1

이라는 추론을 통해 시간 문제를 해결할 수 있었다.

두 번째 시도(방정식)

두번째 시도에서는 런타임에러(DivideByZero) 가 발생하면서 틀렸는데, 친절하게 BOJ에서 말해주고 있듯 나누는 수가 0이 되는 경우의 수 때문에 발생한 문제다.

b-c=0 인 경우엔 -1을 출력하도록 설정해주고 다시 시도하니 성공적으로 풀이할 수 있었다.

저렇게 큰 수를 다루는데 4ms밖에 안걸렸다.
Go 미친놈임

profile
貫徹

0개의 댓글