[프로그래머스] 수열과 구간 쿼리 3

badassong·2023년 8월 11일
0

JS

목록 보기
25/31
post-thumbnail

문제

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.

각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.

위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.


내가 푼 방법

function solution(arr, queries) {
  for (let i = 0; i < queries.length; i++) {
      let fb = arr[queries[i][0]]
      arr[queries[i][0]] = arr[queries[i][1]]
      arr[queries[i][1]] = fb
  } 
  return arr
}

단순 for문을 사용해서 풀었더니 가독성이 안좋다.


Solution 😆

서로 값을 바꾸는 swap은 ES6의 구조 분해 할당 을 사용하는 것이 더 좋다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

function solution(arr, queries) {
    
    return ex29SwapElement(arr, queries);
}

function ex29SwapElement(arr, queries) {
  for (const [index1, index2] of queries) {
    [arr[index1], arr[index2]] = [arr[index2], arr[index1]];
  }
  return arr;
}

또, 이 경우 ex29SwapElement 함수는 코드가 더 이상 분해되지 않는, atomic operation을 하는 함수이다.
이 경우 억지로 의미를 지어주기 보다는 변수를 짧게 사용하는 것을 선호한다.

구조 분해 할당에 익숙한 사람이라면 아래 함수가 더 읽기에 좋다.

index1 => x
index2 => y

function solution(arr, queries) {
    
    return ex29SwapElement(arr, queries);
}

function ex29SwapElement(arr, queries) {
  for (const [x, y] of queries) {
    [arr[x], arr[y]] = [arr[y], arr[x]];
  }
  return arr;
}
profile
프론트엔드 대장이 되어보쟈

0개의 댓글