kr1878   3년 전

출력은 올바르게 되는데 어떻게 해야 시간초과를 없앨 수 있을까요??

scvhero   3년 전

strlen은 한번 호출할때마다 문자열의 길이만큼 시간이 걸립니다

문자열의 길이가 고정되어 있는 이상 여러번 호출할 이유가 없죠

kr1878   3년 전

strlen을 한번만 호출하고 그 후는 모두 변수length를 이용하도록 해도 시간초과가 나오네요..근본적인 문제가 뭘까요??

scvhero   3년 전

여전히 여러번 호출합니다

다시 확인해보세요

djm03178   3년 전

그 부분을 해결한다고 해도 이후에 2중 반복문을 길이만큼씩 돌고 있기 때문에 O(n^2)을 피할 수 없습니다. 더 효율적인 방법을 생각해 보세요.

kr1878   3년 전

이제 시간초과는 해결했는데 왜 틀렸는지 이해가 안됩니다. 반례테스트도 많이 해봤는데 틀렸다고 나오네요....

#include
#include

char voca[1000001];
int count[1000001];

int main()
{
int length = 0, max = 0;
char result = '\0';

scanf("%s", voca);
length = strlen(voca);
for (int i = 0; i < length; i++)
{
if (voca[i] > 90)
{
voca[i] = voca[i] - 32;
}
}//대소문자 변환
if (length == 1)//한글자 짜리
{
printf("%c", voca[0]);
}
for (int j = 0; j < length - 1; j++)
{
for (int k = j + 1; k < length; k++)
{
if (voca[j] == voca[k] && voca[j] != 0)
{
count[j]++;
voca[k] = 0;//테스트 횟수를 줄이기 위해서 0을 대입
}
else if (voca[j] == 0)//비교할 문자가 0이면 즉시 탈출
{
break;
}
}
if (count[j] > max)
{
max = count[j];
result = voca[j];
}
else if (count[j] == max)
{
result = "?";
}
}
printf("%c", result);

return 0;
}

djm03178   3년 전

코드는 본문에 올리지 말고 소스 추가 버튼을 눌러서 코드 오리는 곳에 올려주세요.

이 코드는 예제 1번도 제대로 나올 수 없습니다. https://ideone.com/nEmWnY

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