#include <stdio.h>
int main()
{
int flag;
long long fix, count, pay, sum, set;
// long으로 안하면 21억 1억 1억1을 입력을 했을 때 오버플로우가 일어난다.
// 그래서 longlong으로 때려박았음
scanf("%lld %lld %lld", &fix, &count, &pay); // abc 입력
if (count >= pay)
{
printf("-1");
} // b가 c보다 크거나 같을경우, 손익분기점이 절대 안넘기에 -1로 처리
else
{
flag = 1; // while문이 돌면서 flag하나씩 증가시켜 손익분기점이 어디부터인지 체크하기 위함
set = 1;
sum = fix;
while (1)
{
sum = sum + count; // 하나씩 증가시키면서 sum에 적립시킴
set = pay * i; // 이것도 적립
if (sum < set) // 만약 손익분기점을 넘었다?
{
printf("%d", flag); // flag 출력 후 break로 반복문 종료.
break;
}
flag++;
}
}
}
이렇게 제출하면 시간초과가 난다.
최악의 경우 while문을 엄청나게 돌리면서 0.35초가 넘어가기 때문이다. 뭐 21억, 1억, 1억1 이렇게만 입력해줘도 1억번이 돌아간다..
검색을 통해 a / (c - b) 로 손익분기점을 체크할 수 있는걸 알았다.
#include <stdio.h>
int main()
{
int flag;
int fix, count, pay;
scanf("%d %d %d", &fix, &count, &pay);
if (count >= pay)
{
printf("-1");
}
else
{
flag = 1;
while (1)
{
if (fix / (pay - count) < flag)
{
printf("%d", flag);
break;
}
else
flag++;
}
}
}
flag는 그대로 유지했고, while문도 같다. 단지 a / (c - b)로 필요없는 덧셈식을 제거했고, 정답이 되었다.
#include <stdio.h>
int main(){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(b>=c) printf("-1\n");
else printf("%d\n",a/(c-b)+1);
return 0;
}
근데 다른사람 코드보니 else에 그냥 + 1하고 그대로 출력을 하였다.
걍 어이가 없었다 보고 나니 깨닫게 됨
아 당연하구나..
그리고 굳이 fix count pay 이딴식으로 지었어야 했을까
그냥 abc할 걸 그랬나 싶기도 한데
음..
아니다 변수명 짓는건 그대로 이어나가자 지금부터 연습해놔야지