misule   6년 전

아래와 같은 소스입니다.


그런데 시간 초과가 어느 부분때문에 나는걸까요? 


알려주세요!!

simm4256   6년 전

for문의 동작에 대해 아실 필요가 있습니다.

for(a;b;c){

  d

}

라는 문장은


1) a 실행

2) b가 참인지 거짓인지 판단

3) b가 참이면 d 실행, 거짓이면 종료

4) d 실행이 끝난 후 c 실행

5) c 실행 후 (2)로 돌아가 반복


순서로 동작합니다.


29번째줄의

for (int i=0; i<strlen(n); i++)

의 경우

위 순서에서 (2)에 해당하는 (i<strlen(n))이 참인지 거짓인지 판단하는 부분에서

strlen이라는 함수를 실행시키게 됩니다.

n의 길이가 333,333이라면, strlen이라는 함수는 그만큼 실행되겠죠.

그런데 strlen이라는 함수 자체를 실행시키는 데에도 시간이 들어갑니다.

따라서 시간초과가 발생한 것입니다.


따라서 for문의 조건문에는 함수 사용을 지양하셔야 합니다.


strlen(n)을 변수 하나에 대입해두시고 해당 for문의 조건문을 그 변수로 바꿔보세요.


e.g.


int len = strlen(n);

for(int i=0; i<len; i++)




참고로 이렇게 바꾸시면 '틀렸습니다'를 받으실 겁니다.


처리하지 않으신 예외 케이스가 딱 1개 있습니다.

문제를 주의깊게 읽어보세요.

misule   6년 전

와 덕분에 해결했습니다!!! 친절할 설명 감사드립니다!!! 

예외케이스도 찾았어요! 감사합니다!!

iron1209   5년 전

저도 이걸보고 해결하였습니다!

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