728x90
https://www.acmicpc.net/problem/25556
🖊️문제
포닉스는 길이가 N인 순열 A 네 개의 비어 있는 스택을 가지고 있다.
- 길이가 N인 순열이란,1이상 N이하의 서로 다른 정수 N개가 임의로 나열된 수열을 말한다.
- 스택이란 자료구조의 한 종류로 가장 나중에 삽입한 자료가 가장 먼저 나오는 후입선출 (Last In First Out, LIFO)의 특성을 가지고 있다.
포닉스는 PPC를 맞아 더러워진 순열을 청소하려 한다.
순열을 청소하는 것은 다음과 같은 과정을 통해 순열을 오름차순으로 정렬하는 것을 뜻한다. 즉 순열을 1,2,3,⋯N으로 만들어야 한다.
- 순열 A의 원소들을 앞 원소부터 순서대로 네 개의 스택 중 하나에 삽입한다.
- 순열 A의 모든 원소를 스택에 삽입했다면, 네 개 중 원하는 스택에서 수를 꺼내는 것을 반복하여 네 개의 스택에서 모든 수를 꺼낸다.
- 꺼낸 수들을 꺼낸 순서대로 오른쪽에서 왼쪽으로 나열한다. 즉, 가장 처음에 꺼낸 수가 맨 뒤, 가장 나중에 꺼낸 수가 맨 앞에 위치하게 된다
🖊️ 풀이
import java.util.Scanner;
import java.util.Stack;
public class Clean {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//순열 입력
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i <n ; i++) {
arr[i] = sc.nextInt();
}
//스택 생성(4개)
Stack<Integer>[] stack = new Stack[4];
for (int i = 0; i < 4; i++) {
stack[i] = new Stack<>();
}
//순열 청소
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < 4; j++) {
if(stack[j].isEmpty()||stack[j].peek()<arr[i]){
stack[j].push(arr[i]);
break;
}else if(j<3){
continue;
}else{
System.out.println("No");
return;
}
}
}
System.out.println("Yes");
}
}
728x90
'알고리즘 자료구조 > 백준' 카테고리의 다른 글
[백준] 10807 개수 세기 (0) | 2023.07.18 |
---|---|
[백준] 9012 괄호 (0) | 2023.07.18 |
[백준] 1158 요세푸스 문제 (0) | 2023.07.16 |
[백준] 10818 최소, 최대 (0) | 2023.07.13 |
[백준] 회전하는 큐 (0) | 2023.07.12 |