문제설명
소스코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
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 Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Stack<Integer> stack = new Stack<>();
Queue<Integer> queue = new LinkedList<>();
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < N; ++i) queue.add(Integer.parseInt(st.nextToken()));
int seq = 1;
while(!queue.isEmpty()) //큐가 비어있지 않다면
{
if(queue.peek() == seq) //큐 맨앞과 순서가 맞다면
{
queue.poll(); //큐 맨앞 숫자를 제거
++seq;
}
else if(!stack.isEmpty() && stack.lastElement() == seq) //스택 꼭대기와 순서가 맞다면
{
stack.pop(); //스택 꼭대기 숫자를 제거
++seq;
}
else stack.push(queue.poll()); //스택 꼭대기와 순서가 다르다면, 큐 맨앞을 스택에 저장
}
while(!stack.isEmpty()) //스택이 비어있지 않다면
{
if(stack.lastElement() == seq) //스택 꼭대기와 순서가 맞다면
{
stack.pop(); //스택 꼭대기를 제거
++seq;
}
else
{
System.out.println("Sad");// 스택 꼭대기와 순서가 맞지 않다면 Sad
System.exit(0);
}
}
System.out.println("Nice");
}
}
설명
- 첫 번째 while문에서 큐의 맨 앞부분과, 스택의 꼭대기의 순서를 조사한다.
순서가 맞다면 제거를 하고, 틀리다면 해당 큐를 스택에 넣는다.
이런 반복을 큐가 empty상태가 될 때 까지 반복한다. - 두 번째 while문에서 스택의 꼭대기와 순서를 조사한다.
순서가 맞다면 스택 꼭대기를 제거하고, 틀리다면 Sad를 출력한다.
'자료구조 & 알고리즘 > BOJ' 카테고리의 다른 글
[Java] 백준 2164번 문제 (카드2) (0) | 2023.08.09 |
---|---|
[Java] 백준 11866번 문제(요세푸스 문제 0) (0) | 2023.08.08 |
[Java] 백준 9012번 문제 (괄호) (0) | 2023.08.07 |
[Java] 백준 28278번 문제 (스택 2) (0) | 2023.08.06 |
[Java] 백준 10773번 문제 (제로) (0) | 2023.08.06 |