https://www.acmicpc.net/problem/12789
12789번: 도키도키 간식드리미
인하대학교 학생회에서는 중간, 기말고사 때마다 시험 공부에 지친 학우들을 위해 간식을 나눠주는 간식 드리미 행사를 실시한다. 승환이는 시험 기간이 될 때마다 간식을 받을 생각에 두근두
www.acmicpc.net
Code
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
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> queue = new LinkedList<Integer>(); // 현재 줄 서있는 공간
Stack<Integer> stack = new Stack<Integer>(); // 한명 씩만 설 수 있는 공간
int t = Integer.parseInt(br.readLine());
int count = 1;
StringTokenizer st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()) {
int x = Integer.parseInt(st.nextToken());
queue.add(x);
}
while(!queue.isEmpty()) { // 현재 줄이 없을 때까지
if(queue.peek() == count || !stack.isEmpty() && stack.peek() == count) { // 현재 줄과 한 명만 설 수 있는 공간 체크
if(queue.peek() == count)
{
queue.poll();
count++;
}
else {
stack.pop();
count++;
}
}
else { // 한 줄로 설 수 있는 공간에 넣기
stack.add(queue.peek());
queue.poll();
}
}
while(!stack.isEmpty()) {
if(stack.peek() == count) {
stack.pop();
count++;
}
else {
bw.write("Sad");
br.close();
bw.close();
return;
}
}
bw.write("Nice");
br.close();
bw.close();
}
}
처음엔 문제를 잘 못 이해하고 엄청 틀렸다.
큐와 스택의 peek 위치와 제거되는 위치를 잘 알아야겠다.
'백준' 카테고리의 다른 글
백준[11726]번 : 2xn 타일링 ( JAVA ) (0) | 2023.08.13 |
---|---|
백준[9095]번 : 1, 2, 3 더하기 ( JAVA ) (0) | 2023.08.11 |
백준[2606]번 : 바이러스 ( JAVA ) (0) | 2023.08.09 |
백준[17219]번 : 비밀번호 찾기 ( JAVA ) (0) | 2023.08.04 |
백준[28278]번 : 스택 2 ( JAVA ) (0) | 2023.08.04 |