DY N DY

실력키우기 큐(JAVA) 본문

PARK/ALGORITHM

실력키우기 큐(JAVA)

손세지 2016. 4. 29. 09:51

1697 : 큐(queue)

제한시간: 1Sec    메모리제한: 32mb
해결횟수: 946회    시도횟수: 1889회   



큐는 먼저 들어온 데이터가 먼저 출력된다. 이러한 구조를 선입선출(FIFO - First In First Out)이라고 한다.

이러한 큐 자료구조는 보통 우리의 생활에서는 매우 일상적인 자료구조이다. 큐 자료구조의 형태를 가장 흔히 볼 수 있는 게 “줄서기”가 될 것이다. 은행 창구에서 줄을 서거나, 버스를 기다리기 위해서 줄을 설 경우 가장 먼저 줄을 선 사람이 가장 먼저 은행 업무를 처리하거나, 버스를 타게 된다.(새치기 하는 경우는 생각하지 말자)

그림과 같은 큐 자료구조를 설계하고, 처리조건에 맞는 출력을 하시오.

e3050b66a1b29a01767400d7560a4131_1449727
 

≪처리조건≫
1. 주어지는 명령은 다음의 3가지이다.
2. "i a"는 a라는 수를 큐에 넣는다. 이때, a는 10,000 이하의 자연수이다.
3. "o"는 큐에서 데이터를 빼고, 그 데이터를 출력한다. 만약 큐가 비어있으면, "empty"를 출력한다.
4. "c"는 큐에 있는 데이터의 수를 출력한다.

 

첫줄에 N이 주어진다. N은 주어지는 명령어의 수이다.(1≤N≤100)
둘째 줄부터 N+1줄까지 한 줄에 하나씩 명령이 주어진다.



각 명령에 대한 출력 값을 한 줄에 하나씩 출력한다. 출력내용이 하나도 없는 경우는 주어지지 않는다.


 [Copy]
7
i 7
i 5
c
o
o
o
c
 [Copy]
2
7
5
empty
0


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/**************************************************************
    Problem: 1697
    User: a132034
    Language: Java
    Result: Success
    Time:166 ms
    Memory:8724 kb
****************************************************************/
 
 
import java.util.Scanner;
 
public class Main
{
    private static Scanner sc;
    public static int[] result;
    public static void main(String[] args) {
        sc = new Scanner(System.in);
        int N = sc.nextInt();
         
        //queue 관련
        int[] queue = new int[10000];
        int front = 0 , rear = 0;
        sc.nextLine();
         
        //operator
        String op;
        for(int i = 0 ; i < N; ++i)
        {
            op = sc.nextLine();
            if('i' == (op.toCharArray()[0]))
            {
                queue[front++] = Integer.parseInt(op.substring(2));
            }
            else if ("o".equals(op))
            {
                if(front == rear)
                    System.out.println("empty");
                else
                    System.out.println(queue[rear++]);
            }
            else if("c".equals(op))
            {
                System.out.println(front-rear);
            }
        }
    }
}



실력키우기의 스택 문제와 기본적인 구조는 동일하다 (스택)

queue는 stack과 달리 먼저 들어간 데이터가 빠져나오는 FIFO (First In - First Out)구조이기 때문에 

이를 구현하기위해 2개의 변수가 필요하다(front, rear) 

front 변수는 입력을 받기 위해 사용하였고, rear변수는 출력을 하기 위해 사용하였다. 

만약 front와 rear가 동일한 경우에는 queue에 데이터가 없는 것으로 가정하였으며

총 데이터 수는 front와 rear의 차이만큼이다. 

'PARK > ALGORITHM' 카테고리의 다른 글

실력키우기 후위표기법(JAVA)  (0) 2016.05.02
실력키우기 수열(JAVA)  (0) 2016.04.29
실력키우기 숫자의 개수(JAVA)  (0) 2016.04.28
실력키우기 문자열찾기(JAVA)  (0) 2016.04.28
실력키우기 스택(JAVA)  (0) 2016.04.27