for(j=0;j<27;j++)
{
if(word[i]==j)
alphabet[j]+=1; //단어의 알파벳빈도 체크
}
이 부분을 좀 더 효율적으로 바꿀 수 있을것 같네요
1157번 - 단어 공부
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년 전
이거 하면서 이상한일을 참 많이 겪네요ㅠ
처음엔 strupr(word)로 썼는데 컴파일에러가 나서 저렇게 직접 바꿔주니까 그제야 되네요... 그것도 모르겠고
문자열 받은걸 전부다 -65를 해줬더니 문자열에 a가 있으면 더 이상 작동을 안해서 그냥 -64를 해줬습니다...
그러고서 제출을 했더니 이번엔 시간초과... 어떻게 바꿔야할지 모르겠습니다..