[코테] 프로그래머스 178871. 달리기 경주

Dongmin Lee·2023년 5월 30일
0

코테

목록 보기
15/23

💿 문제

💾 문제 요약

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는 시간 복잡도를 증가시킨다.
객체를 이용해서 극복하기.

배열 요소 순서 바꾸는 방법 => 구조분해할당 이용하기.

profile
어제보다 성장하기

0개의 댓글