fkgnssla   3년 전

뭐가 틀린건가요 ,, 21억 넘어가면 -1 출력아닝가여

dldyddlwl   3년 전

A,B,C 각각은 21억 이하의 자연수이지만, 연산 결과가 21억 이하라는 조건은 없습니다.

fkgnssla   3년 전

그러면 ABC 각각이 21억 넘어가면 if문으로 아예 return 0을 해버리는 건가요 아니면 -1을 출력하라는 건가요..??

dldyddlwl   3년 전

왜 21억을 신경쓰시는건가요? 손익분기점이 발생하지 않는 조건으로 -1을 잘 해놓으셨습니다.

fkgnssla   3년 전

흠 그러면 일단 if (i * B > 2100000000 || i * C > 2100000000)
{
printf("-1");
return 0;
}

이 코드는 지우고 뭘 해야할까요 ㅜㅜ 21억 넘어가는 값 출력하면 재입력 요구하는 코드를 써야하나요?

dldyddlwl   3년 전

21억은 신경 안 쓰셔도 괜찮아요!! 사실 뭐를 걱정하시는 지 잘 모르겠습니다. 아마, 문제 조건에 21억 이하 자연수라는 것 때문에 그러신 것 같은데, 이건 단지 데이터타입을

어떤걸로 해야할 지에 대한 힌트라고 보시면 됩니다. 따로, 21억을 넘어가냐 아니냐를 묻는 조건은 아닙니다!

fkgnssla   3년 전

long long 형을 int형으로 바꿔도 틀렸다고뜨네요 ㅠㅠ 흠 ,, 21억을 딱 맞출수있는 자료형이 있나요?

dldyddlwl   3년 전

int도 21억까지 충분히 할 수 있죠! int가 2^31-1이니까 21억까지 됩니다. 제가 말씀드리고 싶었던건, long long이나 int의 문제가 아니라,

 이제 아래의 코드는 필요가 없다는 것이죠!  위 코드에서 그것만 지우면, 틀렸습니다는 안 뜰거에요. 다만, 시간초과는 뜰 수 있을거에요!

아래의 코드가 필요없는 이유는, 얼마든지 21억을 넘을 수도 있다는 거죠, 예를 들어서, A(고정비용)가 21억이라고 해봅시다!

그 때, B는 20억(가변비용) C는 20억+1(판매가격)이라고 해보죠. 그렇다면 B-C는 1이 됩니다.

따라서, A 즉, 21억의 고정비용을 채우기 위해서는, 최소 21억개는 넘게 팔아야겠죠? 그러면,

i*C = 21억 * (20억 1) , 충분히 21억을 넘길 수 있습니다. 하지만 -1을 출력해야할 손익분기점이 없는 경우는 아니죠! 

혹시나 여기까지 이해가 안되시면 더 열심히 설명드리겠습니다.

fkgnssla   3년 전

아 이해했습니다.  근데 if (i * B > 2100000000 || i * C > 2100000000)
{
printf("-1");
return 0;
}  

이 코드 지워도 해결이 안되네요 ㅠㅠ 아예 방법이 잘못된 걸까요?

dldyddlwl   3년 전

전 딱 그 부분만 지워서 하니 시간초과라고 뜹니다. 아마 틀렸습니다로 뜨신다면, 뭔가 다른 것도 잘못 건드리셨을 수도 있습니다.

방법이 잘못된 건 아닙니다! 잘하셨는데, 다만 이 문제에서는 반복문이 아니라 수학으로 풀기를 원하기 때문에, 반복문으로 하면 시간초과가 뜹니다!

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