드래그 앤 드롭으로 순서를 바꾸는(?) 알고리즘을 어떻게 구현해야할까 고민하다가 이거라도 정리해봄...
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번의 수정 비용이 발생하며, 목록을 조회할 때는 전체를 스캔해야 한다는 단점이 있다.
어느 하나 괜찮은게 없음
'TIL' 카테고리의 다른 글
TIL 240716 - Nest.js에서 jest를 이용해 테스트코드 구현 (0) | 2024.07.16 |
---|---|
TIL 240715 - BFS / DFS (0) | 2024.07.15 |
TIL 240711 - 알고리즘 코드카타 리뷰 - 모음사전 (0) | 2024.07.12 |
TIL 240710 - 캐시 & 메모리 (1) | 2024.07.10 |
TIL 240709 - 알고리즘 코드카타 리뷰 - 주차요금 계산 (0) | 2024.07.09 |