whdqor00   4년 전

질문게시판을 보니 저랑 비슷한 방법으로 푸신 문제 질문도 있어서 참고해봤는데 감이 안 잡힙니다

...그리고 18번째줄 while의 조건을 a + (i*b) - i*c >= 0으로 변경을 해봤는데 그 때는 시간초과가 뜹니다...


inc5025   4년 전

만약 아래와 같은 인풋이 들어왔다고 가정해봅시다.

만드는데 20억원, 팔면 20억1원이니 20억개에 1개를 더 팔면 손익분기점을 넘을 수 있습니다.

위의 코드에서 이 인풋을 실행시키려고 한다면 i가 2000000001일 때 while문을 빠져나올 수 있을 것처럼 보입니다.

하지만 돌려보면 원하는 정답이 나오지 않는데, 2000000000 + (i * 2000000000) 이란 값은 i가 양수일 때, int의 범위를 초과하기 때문입니다.

그래서 원하신대로 코드를 돌려보고 싶다면 a, b, c의 자료형을 long long int로 바꿔주면 됩니다.

하지만 이렇게 돌린다면 while문을 20억번 돌게 된다는 결론이 나옵니다. 아마 시간초과가 나올 것 같습니다.

이렇게 while문을 돌려보는 대신 a b c의 값으로 바로 계산해서 답을 내는 것이 가장 효과적인 방법으로 보입니다.

whdqor00   4년 전

음 반복문을 쓰지 말라고 값으로 바로 비교한 다음에 결과를 유추하라는 말씀이신가요???

inc5025   4년 전

네 맞습니다.

whdqor00   4년 전

음 아직 알고리즘이랑 코딩 초보지만 한번 해보다가 정 안되면 다시 댓글 달아서 질문해보겠습니다ㅠㅠ

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