Stack, Queue

강호수·2022년 9월 17일

알고리즘 강의

목록 보기
5/7

5-1

Stack<Character> stack = new Stack<>(); // stack 생성
stack.push('('); //stack 요소 삽입
stack.pop(); // stack 요소 제거
stack.isEmpty(); // stack이 비어있는지 (true, false 반환)

stack은 먼저 들어간 것이 가장 나중에 나오고, 나중에 들어간 것이 가장 먼저 나온다.

5-2

for (int i=0; i<stack.size(); i++)
	answer += stack.get(i);

stack의 size를 구할 때에는 stack.size() 메서드를 쓰면 된다. 또한 stack에서 i번째에 있는 수를 알아보려면 stack.get(i)라는 것을 통해 쓰면 된다.

5-3

stack에서 가장 위에 올려져있는 값을 추출 없이 그냥 알고만 싶다면 stack.peek()를 쓰면 된다.

5-4

일반 연산식 -> 3(5+2)-9
후위 연산식 -> 352+
9-

352+9- = 379- = 219- (?) = 12

5-6

Queue<Integer> Q = new LinkedList<>(); // Queue 생성
Q.offer(1); // Queue 요소 삽입
Q.poll(); // Queue 요소 제거
Q.isEmpty();
Q.size();

Queue는 선입선출이라고 생각하면 편하다. 먼저 넣었던 것이 먼저 나오므로 Q.offer(Q.poll())과 같이 쓰면 가장 앞에 있던 것이 가장 뒤로 붙는 것이 된다.

5-7

if (x == Q.poll()) // Q.poll()은 요소 제거와 동시에 return 값을 가진다
Q.contains(x) // Q가 x라는 값을 포함하고 있는지 true or false 반환

5-8

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

PriorityQueue<Integer> heap = new PriorityQueue<>();

heap.offer(); // 여러 숫자 삽입

heap.peek(); // 가장 작은 숫자 반환

heap.poll(); // 가장 작은 숫자 꺼냄

0개의 댓글