LIFO : ๋ง์ง๋ง์ผ๋ก ๋ค์ด๊ฐ ๊ฒ, ๊ฐ์ฅ ๋จผ์ ๋์ด
pop()
push()
peak() : ๋ง์ง๋ง ๋ฐ์ดํฐ๋ฅผ ํ์ธ
isEmpty()
import java.util.EmptyStackException;
class Stack<T> {//๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ๋ฐ์ดํฐ ํ์
์ ๋ช
์
class Node<T> { //๊ฐ์ ํ์
์ ๊ฐ๋ ๋
ธ๋ ์ ์ธ
private T data; //๋ฐ์ดํฐ ์ ์ธ
private Node<T> next; //๋ค์ ๋
ธ๋ ์ ์ธ
public Node(T data){
//์์ฑ์์์ ํด๋น ํ์
์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ด๋ถ๋ณ์์ ์ ์ฅ
this.data = data;
}
}
private Node<T> top;
public T pop() {//top์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ด
if (top==null) {
throw new EmptyStackException();
}
T item = top.data;
top = top.next; //pop ์ดํ ๋ค์ ๋ฐ์ดํฐ๋ฅผ top์ผ๋ก ๋ฐ๊ฟ์ค
return item;
}
public void push(T item) {
Node<T> t = new Node<T>(item); //๋ฐ์ item์ผ๋ก ๋
ธ๋ ์์ฑ
t.next = top; //์ด์ ์ top ๋ด๋ ค์ฃผ๊ธฐ
top = t;
}
public T peek() {//๋ง์ง๋ง ๋ฐ์ดํฐ๋ฅผ ํ์ธ
if( top == null ){
throw new EmptyStackException();
}
return top.data;
}
public boolean isEmpty() {
return top == null;
}
}
public class stackJava {
public static void main(String[] args) {
//์ฝ๋ํ์ธ
Stack<Integer> s = new Stack<Integer>();
s.push(1);
s.push(2);
s.push(3);
s.push(4);
System.out.println(s.pop());
}
}
stack2_easy.java
import java.util.EmptyStackException;
import java.lang.Exception;
/**
* Innerstack2_easy
*/
class FullStackException extends Exception {
public FullStackException() {
super();
}
public FullStackException (String msg){
super(msg);
}
}
class FixedMultiStacks { //๊ณ ์ ๊ธธ์ด multi Stack
private int numOfStacks = 3; //stack์ 3๋ถํ
private int stackSize;
private int[] values; //์ค์ ๋ฐ์ดํฐ
private int[] sizes; //๊ฐ ์คํ์ ๋ฐ์ดํฐ size
public FixedMultiStacks (int stackSize){ //์์ฑ์
this.stackSize = stackSize; //stackSize ๋ฅผ ๋ฐ๊ณ , ๋ด๋ถ๋ณ์์ ์ ์ฅ
this.sizes = new int[numOfStacks]; //์คํ์ ๊ฐ์๋งํผ ๋ฐ์ดํฐ ์ฌ์ด์ฆ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด ์์ฑ
this.values = new int[numOfStacks * stackSize]; //์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ณต๊ฐ ์์ฑ
}
//๋ด๋ถํจ์
public boolean isEmpty(int stackNum) {
//stack์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธ; ๊ฐ stack๋ณ๋ก ๋ฐ๋ก ์๋ ค์ค์ผํจ
// < ์ธ์๋ก ๋ช ๋ฒ์งธ stcak์ธ์ง ๋ฐ์์ผ ํจ
return sizes[stackNum] == 0;
//๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ณต๊ฐ= sizes, size์์ stackNum์ด 0์ธ์ง ํ์ธ
}
public boolean isFull(int stackNum){
//stack์ด ๋ค ์ฐผ๋์ง
return sizes[stackNum] == stackSize;
}
public int getTopIndex(int stackNum){
//stack ๊ฐ์ฅ ์์ ๋ฐ์ดํฐ์ ๋ฐฉ๋ฒํธ๋ฅผ ๊ฐ์ ธ์ด
int offset = stackSize * stackNum;
int size = sizes[stackNum]; //ํ์ฌ ๋ฐ์ดํฐ๊ฐ ์ผ๋ง๋ ์ฐจ์๋์ง
return offset + size -1; //๋ฐฉ๋ฒํธ๋ 0๋ถํฐ ์์ํ๋๊น~
}
public void push(int stackNum, int data) throws FullStackException
{
if (isFull(stackNum) ){//๋ค ์ฐจ์์ผ๋ฉด ์์ธ
throw new FullStackException();
}
//๊ณต๊ฐ์ด ๋จ์์์ +1 ํ ๋ฐ์ดํฐ ์ถ๊ฐ
values[getTopIndex(stackNum) + 1] = data;
sizes[stackNum]++;
}
public int pop(int stackNum){
if (isEmpty(stackNum) ){//๋น์ด์๋์ง ํ์ธ
throw new EmptyStackException();
}
int top = getTopIndex(stackNum); //๋ช ๋ฒ ๋ฐฉ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋์ง ๋ฐฉ ๋ฒํธ ํ๋
int data = values[top];
values[top] = 0;//๊ณต๊ฐ ๋น์์ค
sizes[stackNum]--;
return data;
}
public int peek(int stackNum){//ํ์ธ
if (isEmpty(stackNum)){
throw new EmptyStackException();
}
return values[getTopIndex(stackNum)];
}
}
public class stack2_easy {
public static void main(String[] args) {
FixedMultiStacks ms = new FixedMultiStacks(5); //stacksize=5
//๋ฐ์ดํฐ๋ฅผ pushํ ๋ FullstackException ๋ฐ์ ๊ฐ๋ฅ
try {
ms.push(0, 1);
ms.push(0, 2);
ms.push(0, 3);
ms.push(0, 4);
ms.push(0, 5);
ms.push(0, 5);//fullStackException์ผ๋ก..
} catch (FullStackException e) {//5๊ฐ ์ด์ ๋ฃ์ผ๋ฉด exception
System.out.println("It's full.");
}
try {
System.out.println(ms.pop(0)); //5
System.out.println(ms.peek(0));
System.out.println(ms.pop(0));//4
System.out.println(ms.isEmpty(0));
System.out.println(ms.pop(0)); //3
System.out.println(ms.pop(0));//2
System.out.println(ms.pop(0));//1
System.out.println(ms.isEmpty(0));//True
} catch (EmptyStackException e) {
System.out.println("It's empty.");
}
}
}
์ ๋์ .. ์ฝ๋๊ฐ ์กฐ๊ธ ๋ ์ด๋ ค์์ฉ
๊ณ ์ ๊ธธ์ด ๋ถํ : ์คํ์ ์๋ฆฌ๊ฐ ๋ค ์ฐจ๋ฒ๋ฆฌ๋ฉด, ๋ค๋ฅธ์คํ์ ์๋ฆฌ๊ฐ ๋ง์๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ ๋ชปํจ
๋ฐ์ดํฐ๋ฅผ shift ํ๋ ๋ฐฉ์์ผ๋ก ์งํ
0๏ธโฃ-- 1๏ธโฃ1๏ธโฃ1๏ธโฃ 2๏ธโฃ2๏ธโฃ-
0๏ธโฃ-- 1๏ธโฃ1๏ธโฃ1๏ธโฃ1๏ธโฃ 2๏ธโฃ2๏ธโฃ
โ 2๋ฐ์ดํฐ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ณต์ฌ,๋ณต์ฌํด์ stack1 ์๋ฆฌ๋ฅผ ๋ํ
โ stack1์ ํฌ๊ธฐ +1, 3โ4
โ stack2์ ์์์ +1, ํฌ๊ธฐ -1
์ฌ๊ธฐ์ ๋ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด??
๋ฐฉ์ ์ํ Que์ฒ๋ผ ๋๋ ค์! stack0์ ์ถ๊ฐ
0๏ธโฃ-- 1๏ธโฃ1๏ธโฃ1๏ธโฃ1๏ธโฃ 2๏ธโฃ2๏ธโฃ
2๏ธโฃ0๏ธโฃ- 1๏ธโฃ1๏ธโฃ1๏ธโฃ1๏ธโฃ 2๏ธโฃ2๏ธโฃ
โ stack2์ ํฌ๊ธฐ+1
โ stack0์ ์์์ +1, ํฌ๊ธฐ -1
๋ฐฐ์ด[๋ฐฉ๋ฒํธ] = ๋ฐฐ์ด[๋ฐฉ๋ฒํธ-1] โ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ก ๋ฐ๋๋ก, ์๊ธฐ ์คํ์ ์์์ ๋ง๋๊ธฐ๊น์ง ๊ฒ์ ๋๋ฆผ
โ๏ธ์ด ๋, 2๋ฒ๋ฐฉ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ 0๋ฒ๋ฐฉ์ ๋ฃ๋์ง?
Modulo : mod() ํจ์๋ % ์ฐ์ฐ์ โ ์ ํด์ง ์์ญ์ ๋ฒ์ด๋์ง ๋ชปํ๊ฒ ํ๋ ํน์ฑ
0 1 2 3 4 ๋ฐฉ์ด ์์ ๋ 5๋ฒ๋ฐฉ์ ๋ฃ๊ณ ์ถ์๋ฐ ์์. 5%5(๋ฐฉ๊ฐฏ์)=0 โ 0๋ฒ ๋ฐฉ์์ ์คํ
๊ฐ์์ index -1์ ์ฌ์ฉ, max: stack ์ ์ฒด๊ธธ์ด
-1 % max
stack2_dynam.java
//java๋ก stack ๋ฌธ์ ํ์ด
import java.util.EmptyStackException;
import java.util.Scanner;
import java.util.Stack;
//push X: ์ ์ X๋ฅผ ์คํ์ ๋ฃ๋ ์ฐ์ฐ์ด๋ค.
//pop: ์คํ์์ ๊ฐ์ฅ ์์ ์๋ ์ ์๋ฅผ ๋นผ๊ณ , ๊ทธ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ์คํ์ ๋ค์ด์๋ ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
//size: ์คํ์ ๋ค์ด์๋ ์ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
//empty: ์คํ์ด ๋น์ด์์ผ๋ฉด 1, ์๋๋ฉด 0์ ์ถ๋ ฅํ๋ค.
//top: ์คํ์ ๊ฐ์ฅ ์์ ์๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
// class Stack<T> {//ํด๋์ค ์ ์ธ
// }
public class stack_10828 {
public static void main(String[] args) {
//์ฒซ์งธ ์ค์ ์ฃผ์ด์ง๋ ๋ช
๋ น์ ์ N (1 โค N โค 10,000)์ด ์ฃผ์ด์ง๋ค.
//๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๋ช
๋ น์ด ํ๋์ฉ ์ฃผ์ด์ง๋ค.
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
Stack<Integer> stack = new Stack<Integer>();
//push, pop, add, clear, peek, isEmpty, search
int size=0;
for (int i=0; i<N; i++){ //๋ช
๋ น ๋ฐ๊ธฐ
String cmd = sc.next(); //๋จ์ด๋ง ์
๋ ฅ๋ฐ๋๋ค
int cmdInt;
if ("push".equals(cmd)) {
cmdInt = sc.nextInt();
stack.push(cmdInt);
size++;
}
if ("pop".equals(cmd)) {
if (stack.isEmpty() == true) {//์คํ์ด ๋น์ด์์ผ๋ฉด
System.out.println("-1");
}
System.out.println(stack.pop());
size--;
}
if ("size".equals(cmd)) {
System.out.println(size);
}
if ("empty".equals(cmd)) {
if (stack.isEmpty() == true) {//์คํ์ด ๋น์ด์์ผ๋ฉด
System.out.println("-1");
}
else System.out.println("0");
}
if ("top".equals(cmd)) {
System.out.println(stack.peek());
}
}
sc.close();
}
}
ํ๋ฒ์ ๋ฃ์ผ๋ฉด ์คํ์ด ์๋๊ตฌ.. ๋ฐํ์ ์๋ฌ๊ฐ ๋ฌ๋ค..
[์๋ฃ๊ตฌ์กฐ ์๊ณ ๋ฆฌ์ฆ] Stack ๊ตฌํํ๊ธฐ in Java https://youtu.be/whVUYv0Leg0?si=G_FnJjdjpXH8Bdk1
๋ฐฑ์ค ์๋ฃ๊ตฌ์กฐ 10828_Stack๋ฌธ์ https://www.acmicpc.net/problem/10828