las215   5년 전

subString이 아니라 StringBuffer에 charAt으로 딱 필요한 만큼 돌고 더해주는데..

속도가 느린거 같아요..

저기서 어떻게 바꿔야 속도 개선이 될까요??

isku   5년 전

substring(i, n)과 charAt()으로 i부터 n까지 더해주는건 같은 동작입니다.

String은 실제로는 char의 배열 형태이여서,

StringBuffer가 default 길이가 16이여서, 이를 초과하면 더 큰 배열을 생성하고, 기존의 값을 복사합니다.

따라서 StringBuffer에 charAt(i) - charAt(n)까지 넣으면서, StringBuffer가 꽉 차면 배열을 늘릴 때 복사를 하고, toString()을 하면서 또 한번 전체를 복사합니다.

배열 복사가 빈번하게 일어날 수 있습니다.

그런데, substring은 처음부터 끝까지 배열의 길이가 정해져 있으므로 단 한번의 복사로 끝날 수 있는 일입니다.

위 동작방식의 속도차이는 아마 큰 차이가 없겠지만, substring 대신에 stringbuffer를 사용했다고 해서 빨라지는건 아닙니다.

접미사를 구하는 다른 알고리즘을 생각하셔야 할 것 같습니다.

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