본문 바로가기

Java/백준

[JAVA] 백준 12789 도키도키 간식드리미

12789번: 도키도키 간식드리미 (acmicpc.net)

 

12789번: 도키도키 간식드리미

인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두

www.acmicpc.net

 

 

풀이 과정 

 

더보기

처음에는 스택으로만 접근하다가 안풀려서 구글링 해보니 스택과 큐를 이용해서 풀이한 것을 확인함,,,

 

- 입장 순서를 지킬 수 있는지 판단하는 문제 

- Input 큐 :현재 줄 서 있는 곳 (입력 값 저장)

- wait 스택 :임시 대기 공간

- order : 간식을 받을 순서 

 

- input 배열에서 현재 order값이 나올 때까지 stack 배열로 push

- 현재 order 값이 나오면 pop

- stack 배열을 pop 했을 때 order과 같은 숫자가 나온다면 위 과정 반복

- order과 다른 숫자가 나온다면 "sad"출력 

- wait 스택이 비어 있다면, 모든 학생들이 입장 순서를 지켰음을 의미함으로 "Nice" 출력

 

 

Queue 컬렉션 프레임 워크 

 

[Java] 자바 Queue 클래스 사용법 & 예제 총정리 (tistory.com)

 

[Java] 자바 Queue 클래스 사용법 & 예제 총정리

Queue란? Queue의 사전적 의미는 무엇을 기다리는 사람, 차량 등의 줄 혹은 줄을 서서 기다리는 것을 의미하는데 이처럼 줄을 지어 순서대로 처리되는 것이 큐라는 자료구조입니다. 큐는 데이터를

coding-factory.tistory.com

 

- 먼저 들어간 자료가 먼저 나오는 FIFO(First In Frist out) 구조 

- 한쪽은 프런트(front)로 정하여 삭제 연산만 수행

- 다른 한 쪽 끝은 리어(rear)로 정하여 삽입 연산만 수행 

 

import java.util.LinkedList; 
import java.util.Queue;

Queue<Integer>queue = new LinkedList<>();
Queue<String>queue = new LinkedList<>();

queue.add(1); //값 추가 
queue.offer(3); //값 추가 
queue.poll(); //queue에 첫 번째 값을 반환하고 제거, 비어 있다면 null
queue.remove(); //queue에 첫 번째 값 제거 
queue.clear(); //queue 초기화 

queue.peek(); //queue의 첫 번째값 참조

 

- 자바에서 큐는 LinkedList를 활용해서 생성해야 함 

- queue에 값을 추가하고 싶다면 add(value) 또는 offer(value) 메서드를 활용 

- 큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateException을 발생시킴

- queue에서 값을 제거하고 싶다면 poll()이나 remove 메서드를 사용 

- poll() 메서드는 큐가 비어 있으면 null을 반환 

- pop을 하면 가장 앞쪽에 있는 원소의 값이 제거 됨 

- queue의 모든 요소를 제거하려면 clear() 메서드를 사용

 

 

정답 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
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));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        Queue<Integer>Input = new LinkedList<>();
        Stack<Integer>Wait = new Stack<>();
        
        int num = Integer.parseInt(br.readLine());
        int order = 1; 
        
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i=0; i<num; i++)
        {
            Input.offer(Integer.parseInt(st.nextToken()));
        }
        
        while(!Input.isEmpty())
        {
            if(Input.peek() == order)
            {
                Input.poll();
                order++;
            }
            else if(!Wait.isEmpty() && Wait.peek() == order)
            {
                Wait.pop();
                order++;
            }
            else
            {
                Wait.push(Input.poll());
            }
        }
        
        while(!Wait.isEmpty() && Wait.peek() == order) {
            Wait.pop();
            order++;
        }
        
       
        if(Wait.isEmpty())
        {
            bw.write("Nice");
        }
        else
        {
            bw.write("Sad");
        }
        
        bw.flush();
        bw.close();
    }
}

 

'Java > 백준' 카테고리의 다른 글

[JAVA] 백준 1735 분수합  (1) 2024.02.10
[JAVA] 백준 13241 최소공배수  (1) 2024.02.10
[JAVA] 백준 4949 균형잡힌 세상  (2) 2024.02.08
[JAVA] 백준 9012 괄호  (0) 2024.02.08
[JAVA] 백준 10773 제로  (0) 2024.02.08