It's going to be one day 🍀

안녕하세요! 매일 매일 공부하려고 노력하는 백엔드 개발자 지망생의 공부 흔적입니다.

코테 준비/알고리즘

[자료구조] 스택과 큐

2jin2 2024. 3. 6. 00:41

스택 

백준 10828번

- StringBuilder 사용.

- String S 변수에 예제 String들을 담는 동시에 비교함.

- push 2 같은 경우에 push와 2를 어떻게 분리하나 고민했는데 st.nextToken()으로 공백 기준 한번 더 분리해주면 됐다.

import java.io.*;
import java.util.Stack;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Stack<Integer> stack = new Stack<>();
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());

        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String S = st.nextToken();
            if (S.equals("push")) {
                stack.push(Integer.parseInt(st.nextToken()));
            } else if (S.equals("pop")) {
                if (!stack.empty()) {
                    sb.append(stack.pop());
                    sb.append("\n");
                } else {
                    sb.append(-1);
                    sb.append("\n");
                }
            } else if (S.equals("size")) {
                sb.append(stack.size());
                sb.append("\n");
            } else if (S.equals("empty")) {
                if (stack.empty()) {
                    sb.append(1);
                    sb.append("\n");
                } else {
                    sb.append(0);
                    sb.append("\n");
                }
            } else if (S.equals("top")) {
                if (!stack.empty()) {
                    sb.append(stack.peek());
                    sb.append("\n");
                } else {
                    sb.append(-1);
                    sb.append("\n");
                }
            }

        }
        System.out.println(sb);
    }
}

-> if else 문으로 하니 코드가 너무 더러워지니까 switch문으로 다시 적어보기


백준 10845번

- 자바에서 Queue는 LinkedList로 선언해야됨.

- queue의 back을 직접 코드로 구현하는거에 막혔다. queue에서 가장 뒤에 있는 정수를 바로 출력하는 메서드는 없기 때문에, 해당 큐 변수를 LinkedList로 형변환 후 peekLast() 메서드를 사용해주었다.

if (!queue.isEmpty()) {
    sb.append(((LinkedList<Integer>) queue).peekLast());
    sb.append("\n");

 

import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Queue<Integer> queue = new LinkedList<>();
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());

        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String S = st.nextToken();
            if (S.equals("push")) {
                queue.offer(Integer.parseInt(st.nextToken()));
            } else if (S.equals("pop")) {
                if (!queue.isEmpty()) {
                    sb.append(queue.remove());
                    sb.append("\n");
                } else {
                    sb.append(-1);
                    sb.append("\n");
                }
            } else if (S.equals("size")) {
                sb.append(queue.size());
                sb.append("\n");
            } else if (S.equals("empty")) {
                if (queue.isEmpty()) {
                    sb.append(1);
                    sb.append("\n");
                } else {
                    sb.append(0);
                    sb.append("\n");
                }
            } else if (S.equals("front")) {
                if (!queue.isEmpty()) {
                    sb.append(queue.peek());
                    sb.append("\n");
                } else {
                    sb.append(-1);
                    sb.append("\n");
                }
            } else if (S.equals("back")) {
                if (!queue.isEmpty()) {
                    sb.append(((LinkedList<Integer>) queue).peekLast());
                    sb.append("\n");
                } else {
                    sb.append(-1);
                    sb.append("\n");
                }

            }
        }
        System.out.println(sb);
    }
}

-> 최종 코드. 얘도 switch로 바꿔서 다시 풀어보기.

'코테 준비 > 알고리즘' 카테고리의 다른 글

[알고리즘] 그래프  (1) 2024.03.26
[알고리즘] 정수론  (1) 2024.03.16
[알고리즘] 그리디  (0) 2024.03.15
[알고리즘] 탐색  (1) 2024.03.14
[자료구조] 정렬  (3) 2024.03.12