ssssksss   3년 전

1번 단어가 50자 일때

1

aaaaabbbbbcccccdddddeeeeeaaaaabbbbbcccccdddddeeeee

2번 마지막 단어의 길이가 가장 짧을때

5

abc

cde

bcd

asd

z

3번 모든 단어의 길이가 같을 경우

10

a

b

c

a

z

b

d

e

k

a

이런식으로 반례를 해보아도 틀린것은 없는데 잘 모르겠습니다. 문제점이나 반례를 찾아주시면 감사하겠습니다.

seico75   3년 전

strcmp 는 0이냐 음수, 양수이지, 0, 1, -1 로 값을 주도록 되어 있지 않습니다.


https://en.cppreference.com/w/cpp/string/byte/strcmp


Return value

Negative value if lhs appears before rhs in lexicographical order.

Zero if lhs and rhs compare equal.

Positive value if lhs appears after rhs in lexicographical order.

Example

ssssksss   3년 전

시간초과가 발생은 하였지만 일단 전에보다는 좋아졌습니다. 감사합니다

seico75   3년 전

strcmp, strlen, strcpy 모두 문자열 길이에 비례하는 연산시간이 들어서  quick 소트 내에서 시간을 많이 소모할 것 같습니다.

strcmp 는 어쩔 수 없다고 해도 strlen 문자열 길이는 미리 계산해놓고 사용하고, 

strcpy 는 없애서.. 문자열 카피가 아니라 문자열의 index 를 옮기는 식으로 수정하면 어떨까 합니다.

char str[문자열 최대수][문자열 최대 길이 + 1];

int index[문자열 최대수];

처음에 index 의 값은 모두 자기 위치와 동일하게 하고  index[i] = i;

소트할때 str[index[i]] 와 str[index[j]] 를 비교하면서 index[i] 와 index[j] 의 값을 바꾸는 식으로요..

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