whgkdrjs4321   4년 전

이 문제에 대해서 계속해서 시간초과가 뜨는데 혹시 어떻게 해야 이 오류를 해결할 수 있을까요?

참고로 일부러 pair를 안 사용하고 풀어보기 위해서 선택정렬로 x,y를 정렬했습니다.

djm03178   4년 전

N이 10만인 문제에 O(N^2)인 선택 정렬을 사용하셨기 때문에 당연히 시간 초과가 됩니다.

whgkdrjs4321   4년 전

pair를 안 쓰려고 하다보니 x,y를 별개의 배열로 선언할 수 밖에 없었고, 그것을 정렬하다보니 O(n*m)이 필연적으로 사용될 수 밖에 없는 것 같습니다.

혹시라도 sort를 안 쓰고 위의 코드처럼 정렬할 수 있으면서 시간초과가 안 날 수 있는 방법이 있을까요?

djm03178   4년 전

pair를 안 썼다는 것은 단지 원소를 옮길 때 x와 y를 같이 옮기면 될 뿐이고, 그 때문에 정렬 알고리즘에 영향을 줄 부분은 전혀 없습니다.

병합 정렬을 하든, 힙 정렬을 하든 원소를 옮기는 순간에 같이 옮기는 방식으로 O(NlogN)의 정렬을 하면 됩니다. std::sort가 마법을 부려서 O(NlogN)인 것이 아니고 그냥 이런 평범한 정렬 알고리즘들을 섞어서 씁니다.

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