Stack<Character> stack = new Stack<>(); // stack 생성
stack.push('('); //stack 요소 삽입
stack.pop(); // stack 요소 제거
stack.isEmpty(); // stack이 비어있는지 (true, false 반환)
stack은 먼저 들어간 것이 가장 나중에 나오고, 나중에 들어간 것이 가장 먼저 나온다.
for (int i=0; i<stack.size(); i++)
answer += stack.get(i);
stack의 size를 구할 때에는 stack.size() 메서드를 쓰면 된다. 또한 stack에서 i번째에 있는 수를 알아보려면 stack.get(i)라는 것을 통해 쓰면 된다.
stack에서 가장 위에 올려져있는 값을 추출 없이 그냥 알고만 싶다면 stack.peek()를 쓰면 된다.
일반 연산식 -> 3(5+2)-9
후위 연산식 -> 352+9-
352+9- = 379- = 219- (?) = 12
Queue<Integer> Q = new LinkedList<>(); // Queue 생성
Q.offer(1); // Queue 요소 삽입
Q.poll(); // Queue 요소 제거
Q.isEmpty();
Q.size();
Queue는 선입선출이라고 생각하면 편하다. 먼저 넣었던 것이 먼저 나오므로 Q.offer(Q.poll())과 같이 쓰면 가장 앞에 있던 것이 가장 뒤로 붙는 것이 된다.
if (x == Q.poll()) // Q.poll()은 요소 제거와 동시에 return 값을 가진다
Q.contains(x) // Q가 x라는 값을 포함하고 있는지 true or false 반환
class Person{
~~
생성자
~~
}
public class Main {
public int solution(~~) {
Queue<Person> Q = new LinkedList<>();
이 문제에서는 주어진 수가 있었고, 그 수의 위치또한 중요했다. 따라서 Person이라는 class를 따로 생성한 뒤 그곳에 id와 priority라는 변수를 만들었다.
그리고 그 class를 Queue의 자료형에 넣었는데, 이렇게 되면 Queue 안에는 하나의 정보에 각각 Person class의 id와 priority 값이 모두 들어가게 된다.
Q.offer(new Person(i,arr[i]));
위와 같이 Q에 Person 객체를 넣게 된다. 이 때 Q에서 꺼낸 값을 x라고 하면 x.priority 혹은 x.id와 같이 사용할 수 있게 된다.
PriorityQueue<Integer> heap = new PriorityQueue<>();
heap.offer(); // 여러 숫자 삽입
heap.peek(); // 가장 작은 숫자 반환
heap.poll(); // 가장 작은 숫자 꺼냄