스택

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

스택은 마지막 순위가 먼저 나오는(LIFO) 원칙을 따르는 직선 데이터 구조입니다. 스택의 맨 위는 가장 최근에 추가된 항목이고, 맨 아래는 가장 최근에 추가된 항목입니다.

스택 데이터 구조를 식탁 위의 쌓인 접시처럼 생각할 수 있습니다. 시작하면 하나를 가지고 다음에 위에 올립니다. 스택에서 플레이트를 가져올 때 첫 번째 개는 스택에서 제거하고 위에 올립니다.

스택에는 두 가지 주요 작업이 있습니다: push 는 요소를 스택 상단에 추가하기 위해, pop 는 요소를 스택 상단에서 제거합니다. 스택은 고정 크기를 가질 수 있거나 동적으로 크기를 조정할 수 있습니다. 스택은 백 트래킹 알고리즘과 같은 디자인 용途에 유용

스택 구현

Luau에는 내장된 데이터 구조인 스택이 없지만, 테이블 을 사용하여 스택을 구현할 수 있습니다. 다음 코드 샘플은 스택을 구현하는 방법을 보여 ��


local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- 스택이 비어 있는지 확인
function Stack:IsEmpty()
return #self._stack == 0
end
-- 새 값을 스택에 넣습니다.
function Stack:Push(value)
table.insert(self._stack, value)
end
-- 스택에서 값을 제거
function Stack:Pop()
if self:IsEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack

다음 코드 샘플은 Script 아래에 있는 Workspace 의 사용 예입니다. 코드를 수정하고, 입력및 저장 위치를 맞춰 사용자 지정할 수 있습니다, 이 경우 이전 구현 코드 샘플을 올바르게 저장해야 합니다.

스택 사용 예시

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Stack = require(ReplicatedStorage:WaitForChild("Stack"))
local s = Stack.new()
-- 스택 결과 스택 출력 변경
s:Push(1) --
s:Push(5) -- :{1, 5}
s:Push(10) -- :{1, 5, 10}
print(s:Pop()) -- :{1, 5} 10
print(s:Pop()) -- 5개의 {1}
s:Push(20) -- :{1, 20}
print(s:Pop()) -- 그리고 {1} 20
print(s:Pop()) -- {} 1

이전 코드 샘플을 변경하지 않고 실행하면 예상 출력은 다음과 같습니다.

예시 출력

10
5
20
1