hsu2016   2년 전

시간초과가 계속납니다ㅜㅜ

scanf도 써보고 printf도 써보고 endl도 없애보고.......

어떻게 해야 해결할 수 있을까요?

djm03178   2년 전

이 문제는 테스트케이스가 굉장히 많은 문제입니다. 그래서 입출력을 느리게 하면 시간 초과가 납니다.

scanf와 printf를 써보셨다고 했는데 정말로 그 둘만 썼다면 통과가 됩니다. 둘 중 하나만 했으면 시간 초과를 피할 수 없습니다.

endl은 물론 없어야 하지만 그와 똑같은 효과를 내는 것이 바로 cin과 cout을 번갈아 쓰는 것입니다. cin은 기본적으로 cout에 tie되어있어, 둘을 번갈아 쓰면 매번 flush가 발생합니다. endl이 느린 이유와 같습니다.

endl을 '\n'으로 바꾸고, main 함수의 시작 부분을 아래와 같이 하면 통과됩니다.

djm03178   2년 전

그리고 이건 입출력에서 소요되는 시간에 비하면 아무것도 아니지만 약간 더 효율적으로 만들 수 있는 부분입니다.

  1. 팩토리얼 값을 매번 새로 구하는 것보다는 한 번 구해둔 값을 이후에는 바로바로 사용하면 더 효율적입니다.
  2. 21번째 줄처럼 루프를 돌릴 필요가 없습니다, s[i] - '0' 하면 원하는 값이 됩니다. 그리고 48 같은 아스키 코드 값을 사용하는 건 매우 나쁜 습관입니다. 문자 상수 '0'을 쓰세요.

hsu2016   2년 전

항상 좋은 지적 감사드립니다.

오늘도 한가지 나쁜습관 고치고 갑니다

추운데 감기 조심하시고 질문하면 또 답글 달아주세요ㅎㅎ

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