본문 바로가기
TIL

TIL 240712 - 랭킹 알고리즘

by lemonpie611 2024. 7. 12.

드래그 앤 드롭으로 순서를 바꾸는(?) 알고리즘을 어떻게 구현해야할까 고민하다가 이거라도 정리해봄...

1. Integer 방식

각 항목의 순서를 연속된 정수로 저장하는 가장 고전적인 방법.

순서를 변경할 경우, 변경할 항목 뿐 아니라 다른 항목들의 번호까지 모두 바꿔줘야 하기때문에 효율이 좋진 않다.

 

예를 들어, A, B, C, D, E의 order가 각각 1, 2, 3, 4, 5인 상태에서 E를 A와 B 사이로 옮길 경우, E의 번호를 2로 바꿀 뿐 아니라 B, C, D의 번호를 1씩 증가시켜야 한다.

 

2. GreenHopper 방식

Integer 방식과 유사하지만, 각 항목별 순위값의 간격을 충분히 둔다.

예를 들어 A, B, C, D, E의 order를 각각 1, 200, 300, 400, 500으로 두는 것이다

E를 A와 B 사이로 옮길 경우, E의 번호를  100으로 바꿔주기만 하면 된다.

 

그러나,이미 순위값이 밀집되어 있어 새로운 값을 부여하기 어려울 경우, 시스템을 중단하고 순위값을 재조정하는 번거로운 작업이 필요하다.

 

3. Linked List 방식

각 항목이 이전 항목과 다음 항목의 정보를 갖고 있는 방식으로, 순위값 고갈 현상이 일어나지 않는다.

순서를 변경할 때 연결된 항목들의 이전과 다음 정보를 수정하기 위해 2~4번의 수정 비용이 발생하며, 목록을 조회할 때는 전체를 스캔해야 한다는 단점이 있다.

 

어느 하나 괜찮은게 없음