스택

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

스택은 LIFO(Last-In-First-Out) 원칙을 따르는 아이템 컬렉션이 있는 선형 데이터 구조입니다.스택의 상단은 가장 최근에 스택에 추가된 항목이고, 스택의 하단은 가장 최근에 추가된 항목입니다.

스택 데이터 구조를 저녁 접시 더미로 생각할 수 있습니다: 한 개로 시작하고 위에 다른 것을 더 놓습니다.스택에서 플레이트를 가져올 때, 스택에서 제거하는 첫 번째 항목은 꼭대기에 배치하는 마지막 항목입니다.

스택에는 두 가지 주요 작업이 있습니다: 푸시 스택의 상단에 요소를 추가하고 스택의 상단에서 요소를 제거합니다.스택에는 고정된 크기가 있거나 동적으로 크기가 조정될 수 있습니다.스택은 백트래킹 알고리즘과 같은 디자인 사용에 도움이 됩니다.

스택 구현

Luau에는 기본 데이터 구조로 스택이 없지만, 테이블을 사용하여 스택을 구현할 수 있습니다.다음 코드 샘플은 스택을 만드는 방법, push 스택에 개체를 만드는 방법, 그리고 pop 스택에서 개체를 만드는 방법을 보여줍니다경험에 이 구현을 사용하려면 ModuleScript로 저장하고 ReplicatedStorage에 저장하여 스택이 클라이언트와 서버 모두에서 액세스할 수 있도록 해야 합니다.


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

다음 코드 샘플은 아래의 아래에서 사용 예시입니다.이전 구현 코드 샘플을 적절하게 저장하는 한, 코드, 입력및 저장소 위치를 사용자 요구에 맞게 수정할 수 있습니다.

스택 사용 예시

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Stack = require(ReplicatedStorage:WaitForChild("Stack"))
local s = Stack.new()
-- 스택 결과 스택 출력 변경
s:push(1) -- {1}
s:push(5) -- {1, 5}
s:push(10) -- {1, 5, 10}
print(s:pop()) -- {1, 5} 10
print(s:pop()) -- {1} 5
s:push(20) -- {1, 20}
print(s:pop()) -- {1} 20
print(s:pop()) -- {} 1

아무것도 변경하지 않고 이전 코드 샘플을 실행하면 예상 출력은:

예시 출력

10
5
20
1

이 페이지