Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 1707
- 동적계획법
- 그래프
- 프로그래머스
- Java
- 이분그래프
- Bottom Up
- n진법게임
- 알고리즘
- DynamicProgramming
- 순회
- 9093
- 11724
- 도커
- dfs
- BFS
- 완전이진트리
- 연결요소
- 전공자따라잡기
- 포화이진트리
- 링킹
- 인오더
- 포스트오더
- 바인딩
- 웹개발
- JAVA_HOME
- 이진트리
- 피보나치
- 백준
- 자바
Archives
- Today
- Total
물음표 살인마
[백준10845] 큐(queue)란? 자바로 큐 구현하기 본문
큐란?
한쪽 끝에서만 자료를 넣고 반대쪽 끝에서만 뺄 수 있는 자료구조
먼저 넣은 것이 먼저 나오기 때문에 FIFO(First In First Out) 이라고도 한다.
- push: 큐에 자료를 넣는 연산
- pop: 큐에서 자료를 빼는 연산
- front: 큐의 가장 앞에 있는 자료를 보는 연산
- back: 큐의 가장 뒤에 있는 자료를 보는 연산
- empty: 큐가 비어있는지 아닌지를 알아보는 연산
- size: 큐에 저장되어있는 자료의 개수를 알아보는 연산
bfs 알고리즘에서 많이 쓰이기 때문에 필수적으로 알아두어야 하는 자료구조이다.
java의 경우 java.util.Queue를 사용하면 된다.
Java로 큐 구현하기(백준 10845)
int[] arr = new int[10000];
int begin = 0;
int end = 0;
자료를 넣을 배열과,
자료가 들어있는 시작위치와 끝 위치를 담을 변수를 선언해준다.
end는 마지막으로 담긴 위치가 아닌 다음으로 담길 위치를 나타내며,
begin ~ (end - 1)까지 자료가 담겨있다.
백준 문제 풀이를 위한 코드
참고로 백준 문제에 "출력한다" 라고 되어있었기 때문에 각 함수에 print를 찍어줬지만,
결과값을 return 시킨 뒤 Stringbuilder를 통해 한번에 출력시키면 더 빠른 결과를 얻을 수 있다.
package dataStructure;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Baekjoon10845 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
Queue queue = new Queue();
int n = Integer.parseInt(br.readLine());
while(n-- > 0){
st = new StringTokenizer(br.readLine(), " ");
switch (st.nextToken()){
case "push":
queue.push(Integer.parseInt(st.nextToken()));
break;
case "pop":
queue.pop();
break;
case "size":
queue.size();
break;
case "empty":
queue.empty();
break;
case "front":
queue.front();
break;
case "back":
queue.back();
break;
}
}
}
}
class Queue{
int[] arr = new int[10000];
int begin = 0;
int end = 0;
void push(int x){
arr[end] = x;
end++;
}
void pop(){
if (end == begin){
System.out.println(-1);
}else{
System.out.println(arr[begin++]);
}
}
void size(){
System.out.println(end - begin);
}
void empty(){
System.out.println((begin == end) ? 1 : 0);
}
void front(){
System.out.println((begin == end) ? -1 : arr[begin]);
}
void back(){
System.out.println((begin == end) ? -1 : arr[end - 1]);
}
}
'개발지식 > Algorithm' 카테고리의 다른 글
[그래프] 그래프 알고리즘 기초 (0) | 2023.01.07 |
---|---|
[백준 1978, 1929, 6588] 소수에 대하여 (0) | 2022.09.13 |
[백준9093] 단어뒤집기 세가지 방법으로 풀어보기 (0) | 2022.08.16 |
[백준10828] 스택(stack)이란? 자바로 스택 구현하기 (0) | 2022.08.16 |
알고리즘 기초 (0) | 2022.08.15 |
Comments