- 목차 -
  • 배열은 진짜 자료구조
  • 배열, 단순 리스트 넘어 자료구조

    지금까지 배열의 개념과 메서드를 배웠다면, 이제 활용할 차례입니다. 배열은 단순한 리스트 이상의 역할을 하며, 실전에서는 큐, 스택, 심지어 행렬 같은 다차원 배열까지 표현할 수 있습니다. 자바스크립트 배열을 자료구조처럼 활용하는 실전 예제들을 알아봅시다.


    다차원 배열

    다차원 배열: 행(row)과 열(column)로 구성된 2차원 배열을 살펴보고, 중첩 루프를 통해 순회하는 방법을 알아봅니다.

    const matrix = [
      [1, 2, 3],
      [4, 5, 6],
      [7, 8, 9]
    ];
    
    console.log(matrix[1][2]); // 6
    
    • 행(row)과 열(column)로 구성
    • 중첩 루프를 통해 순회 가능
    for (let row of matrix) {
      for (let value of row) {
        console.log(value);
      }
    }
    

    큐 (Queue): FIFO

    : push()로 요소를 넣고 shift()로 꺼내는 FIFO (First In First Out) 구조를 배열로 구현합니다.

    const queue = [];
    
    queue.push(1); // enqueue
    queue.push(2);
    console.log(queue.shift()); // dequeue → 1
    console.log(queue.shift()); // 2
    
    • push()로 넣고 shift()로 꺼냄
    • 입력은 뒤, 출력은 앞

    스택 (Stack): LIFO

    스택: push()로 요소를 넣고 pop()으로 꺼내는 LIFO (Last In First Out) 구조를 배열로 구현합니다.

    const stack = [];
    
    stack.push(1);
    stack.push(2);
    console.log(stack.pop()); // 2
    console.log(stack.pop()); // 1
    
    • push()로 넣고 pop()으로 꺼냄
    • 입력도, 출력도 뒤

    배열 활용 알고리즘 예시

    괄호 짝 검사 (스택 활용)

    function isValidParen(s) {
      const stack = [];
      for (let ch of s) {
        if (ch === '(') stack.push(ch);
        else {
          if (stack.length === 0) return false;
          stack.pop();
        }
      }
      return stack.length === 0;
    }
    
    isValidParen("(())"); // true
    isValidParen("(()");  // false
    

    2차원 배열 회전

    function rotateMatrix(matrix) {
      return matrix[0].map((_, colIndex) =>
        matrix.map(row => row[colIndex]).reverse()
      );
    }
    
    rotateMatrix([
      [1, 2],
      [3, 4]
    ]);
    // → [[3, 1], [4, 2]]
    

    중복 제거

    const arr = [1, 2, 2, 3, 4, 4];
    const unique = [...new Set(arr)];
    console.log(unique); // [1, 2, 3, 4]
    

    Set과 배열을 결합하면 빠르게 중복 제거 가능


    배열은 진짜 자료구조

    배열은 단순한 값 목록을 넘어 큐, 스택, 트리, 그래프 구현까지 다양한 자료구조를 표현하는 데 활용될 수 있습니다. 배열 메서드에 익숙해졌다면 이제 구조적 활용에 익숙해질 차례입니다. 알고리즘 문제 해결 능력 향상을 위해서도 배열을 자유자재로 다루는 것은 필수적입니다.