백준 10845 - 큐 (자바)

남현·2025년 7월 23일

백준

목록 보기
6/16

문제

풀이1

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		Queue<Integer> q = new LinkedList<>();
		for(int i=0; i<N; i++) {
			String str = sc.next();
			switch(str) {
			case "push" :
				q.add(sc.nextInt());
				break;
			case "pop" :
				if(q.size() == 0) {
					System.out.println(-1);
				}
				else {
					System.out.println(q.poll());
				}
				break;
			case "size" :
				System.out.println(q.size());
				break;
			case "empty" :
				if(q.size() == 0) {
					System.out.println(1);
				}
				else {
					System.out.println(0);
				}
				break;
			case "front" :
				if(q.size() == 0) {
					System.out.println(-1);
				}
				else {
					System.out.println(q.peek());
				}
				break;
			case "back":
				if(q.size() == 0) {
					System.out.println(-1);
				}
				else {
					System.out.println(((LinkedList<Integer>) q).getLast());
				}
			}
		}
	}
}

회고

LinkedList 클래스에서 getLast() 메서드 사용 하여 back 기능 구현

github back 코드

case "back":
				if (qqq.isEmpty()) {
					System.out.println(-1);
				} else {
					int last = 0;
					for (int value : qqq) {
						last = value;
					}
					System.out.println(last);
				}
				break;
			}

큐 전체를 순회하면서 마지막 값을 찾는 방식

큐를 for-each로 순회하면서 last에 하나씩 대입
마지막 원소일 때 값이 last에 남음
그 값을 출력

풀이 2

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		Que q = new Que(N);
		for(int i=0; i<N; i++) {
			String str = sc.next();
			switch(str) {
			case "push" :
				q.push(sc.nextInt());
				break;
			case "pop" :
				q.pop();
				break;
			case "size" :
				q.size();
				break;
			case "empty" :
				q.empty();
				break;
			case "front" :
				q.front();
				break;
			case "back" :
				q.back();
				break;
			}
		}
	}
}

class Que {
	int[] arr;
	int count = 0;
	int t;
	public Que(int size) {
		arr = new int[size];
	}
	void push(int X) {
		arr[count] = X;
		count++;
	}
	void pop() {
		if (count == 0) {
			print();
		} else {
			System.out.println(arr[0]);
			for(int i=1; i<count; i++) {
				arr[i -1] = arr[i];
			}
			count--;
		}
	}
	void size() {
		System.out.println(count);
	}
	void empty() {
		if(count == 0) {
			System.out.println(1);
		} else {
			System.out.println(0);
		}
	}
	void front() {
		if(count == 0) {
			print();
		} else {
			System.out.println(arr[0]);
		}
	}
	void back() {
		if (count == 0) {
			print();
		} else {
			System.out.println(arr[count-1]);
		}
		
	}
	void print() {
		System.out.println(-1);
	}
}

회고

pop 부분의 로직을 코드로 구현하지 못함
(틀리게 작성)
배열의 앞 요소를 제거 -> 뒤의 요소들을 앞으로 이동

profile
백엔드 호소인

0개의 댓글