indexOf 안쓰고 인덱스 조회해서 배열 순서 바꾸삼
indexOf를 사용하지 못하므로, 인덱스를 저장할 객체를 생성해준다.
for문을 돌려 키에 원본 배열 요소의 값을, 값에 원본 배열 요소의 인덱스를 넣어준다.
for문을 돌려 현재 인덱스를 가리키는 변수 = 인덱스 객체[참조할 배열의 요소], 즉 curIdx = indexMap[calling] << 이렇게 할당해준다.
앞의 인덱스와 순서를 바꿔줘야 하니 prevIdx = curIdx -1;도 할당해준다.
prevIdx 가 0보다 크거나 같은 경우
구조분해할당을 통해 원본 배열의 순서를 바꿔주고, 원본 배열의 인덱스가 바뀌었으니 객체 키의 값 또한 바꿔준다.
function solution(players, callings) {
const indexMap = {};
for (let i = 0; i < players.length; i++) {
indexMap[players[i]] = i;
}
for (let i = 0; i < callings.length; i++) {
const calling = callings[i];
const curIdx = indexMap[calling];
const prevIdx = curIdx - 1;
if (prevIdx >= 0) {
[players[curIdx],players[prevIdx]] = [players[prevIdx],players[curIdx]];
indexMap[calling] = prevIdx;
indexMap[players[curIdx]] = curIdx;
}
}
return players;
}
indexOf는 시간 복잡도를 증가시킨다.
객체를 이용해서 극복하기.
배열 요소 순서 바꾸는 방법 => 구조분해할당 이용하기.