shin748   6년 전

이거 하면서 이상한일을 참 많이 겪네요ㅠ

처음엔 strupr(word)로 썼는데 컴파일에러가 나서 저렇게 직접 바꿔주니까 그제야 되네요... 그것도 모르겠고

문자열 받은걸 전부다 -65를 해줬더니 문자열에 a가 있으면 더 이상 작동을 안해서 그냥 -64를 해줬습니다...

그러고서 제출을 했더니 이번엔 시간초과... 어떻게 바꿔야할지 모르겠습니다..

chojl1125   6년 전

for(j=0;j<27;j++)

{

if(word[i]==j)

alphabet[j]+=1;  //단어의 알파벳빈도 체크
}

이 부분을 좀 더 효율적으로 바꿀 수 있을것 같네요

kyhdudgns113   6년 전

for(i=0;i<strlen(word);i++)
{  내용  }

이쪽 코드를 해석해보면, i 를 0으로 초기화 한 다음, 조건문인 i < strlen(word) 로 넘어가게 됩니다. 

이 때, i 가 word 의 길이보다 작은지 확인하기 위해서 strlen(word) 함수를 호출을 하게 됩니다. 

아마도 0부터 strlen(word) - 1 까지 총 word 의 길이만큼 호출을 하게 되겠지요?

그런데 strlen(word) 는 word 의 길이만큼 연산을 하게 됩니다. word 의 길이를 len 이라 하면, len 만큼 걸리는 함수를 len 만큼 호출하게 되는 꼴이지요. 여기서 word 의 길이가 100만까지니까 총 100만*100만 = 1조번 의 연산을 하게됩니다. 그래서 터지는 것이구요.

따라서 저 부분의 코드를 이렇게 바꿔주시면 됩니다.

for(i=0;i<len;i++)
{
for(j=0;j<27;j++)
{
if(word[i]==j)
alphabet[j]+=1;  //단어의 알파벳빈도 체크
}
}


shin748   6년 전

아 for문 strlen을 바꾸니까 되네요 감사합니다..

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