lllllllhisll   5년 전

전사실 런타임에러나려나 했는데 그냥 틀렸습니다가 나오네요 ㅠㅠ

제가 놓치는 부분이 있을까요?

hyunynim   5년 전

일단 확인해보니 틀린 예제는 없는데 m이 0인 경우가 테스트 케이스에 들어있어서 틀리다고 나오는 것 같습니다

틀린것도 틀린것이지만 코딩하실 때 두 가지 부분을 주의하셨으면 합니다.

하나는 for문 안의 조건식 부분에 함수를 쓰지 않는것 입니다.

sqrt함수나 이 문제의 조건을 봤을 때 이 문제에서 TLE를 받지는 않겠지만 

이 사이트의 블로그 탭에서 잘 찾아보시면 strlen과 같은 함수는 O(n)의 시간 복잡도를 갖기 때문에

하나의 for문 안에 strlen 함수가 들어갔다면 이 코드의 시간복잡도는 1중 for문이라 O(n)이 아닌 O(n^2)이 됩니다.

두번째는 실수의 사용입니다. 

실수는 컴퓨터내에서 정확하게 나타나지 않을수도 있습니다.

예를들어 

double d = sqrt(m);

for(int i = 0; i<d; ++i) 구문을 쓰기 보다는

for(int i = 0; i * i < d; ++i) 를 쓰는것을 추천드리고 싶습니다.

우측 상단의 블로그 메뉴에 들어가보시면 관련 내용들에 대해 잘 설명해둔 글이 있으니 한번 읽어 보시는게 좋을듯 합니다.


lllllllhisll   5년 전

좋은말씀 감사합니다!!

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