문제는 요렇고
입출력 예제에서 알 수 있듯이,
저렇게 입력값 그리고 계산되어 나오는 출력값이 클 수 있다는 것은 하나하나 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 미친놈임