본문 바로가기
Blog/Study

4회 테코테코

by 코젼 2024. 10. 6.
728x90
반응형

 


목차


요약

Queue

내부 동작 방식 (배열 기반) - 선형 Queue

Integer.MAX_VALUE 에서 -8 을 빼서 default 사용한다. (메모리 안정성 때문인가??) 

 

선형 Queue 문제점: 메모리 낭비 -> 원형 큐 사용

초기 front, rear 값은 모두 -1이다.

 

1. isFull 을 통해 data[max_size] 와 크기를 비교한다. 꽉찬 경우, false 를 반환한다.

2. offer 를 해서 data 에 값을 넣는다. + rear 값을 1 증가 시킨다.

3. poll 할 경우 front 값을 1 증가 시킨다. (데이터가 삭제되지 않는다.)

4. offer == poll 인 경우 isEmpty 가 true 이다.


Queue

문제

10845번: 큐

https://www.acmicpc.net/problem/10845

접근 방법

- 라이브러리를 사용하지 않고 배열을 선형 큐로 만들어서 직접 구현해보자

고민 포인트

- 배열의 크기를 얼마나 잡아야 하지?

최종 코드 및 회고

- 처음에 rear + 1 로 size 를 계산해서 정확한 값이 출력되지 않았었다.

- size 를 변수로 따로 관리해서 문제를 해결할 수 있었다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    static final int MAX_SIZE = 10000;
    static int front = -1, rear = -1;
    static int length = 0;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int size = Integer.parseInt(br.readLine());

        int[] data = new int[MAX_SIZE];

        for (int i = 0; i < size; i++) {
            String[] command = br.readLine().split(" ");
            switch (command[0]) {
                case "push":
                    if (!isFull()) {
                        rear++;
                        length++;
                        data[rear] = Integer.parseInt(command[1]);
                    }
                    break;
                case "pop":
                    if (!isEmpty()) {
                        front++;
                        length--;
                        System.out.println(data[front]);
                    } else System.out.println(-1);
                    break;
                case "front":
                    System.out.println(isEmpty() ? -1 : data[front + 1]);
                    break;
                case "back":
                    System.out.println(isEmpty() ? -1 : data[rear]);
                    break;
                case "size":
                    System.out.println(isEmpty() ? 0 : length);
                    break;
                case "empty":
                    System.out.println(isEmpty() ? 1 : 0);
                    break;
            }
        }
    }

    private static boolean isFull() {
        return rear == MAX_SIZE;
    }

    private static boolean isEmpty() {
        return front == rear;
    }
}
728x90
반응형

'Blog > Study' 카테고리의 다른 글

DDD 스터디 + a  (5) 2024.10.01
3회 테코테코  (0) 2024.09.29
2회 테코테코  (0) 2024.09.22
1회 테코테코  (4) 2024.09.15

댓글