이미지를 클릭하시면 문제 링크로 연결됩니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class beak25556 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 번호 입력
int n = Integer.parseInt(br.readLine()); // 길이가 n 인 순열을 만들기 위한 변수 선언
StringTokenizer st = new StringTokenizer(br.readLine()); // 문자열 분리
int[] arr = new int[n]; // 길이가 n 인 순열을 만들기 위한 배열 선언
// arr 배열에 입력받은 번호 저장
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken()); // 토큰에서 하나씩 꺼내서 배열에 저장
}
Stack<Integer>[] stacks = new Stack[4]; // 네 개의 비어 있는 스택 0으로 초기화
for (int i = 0; i < 4; i++) {
stacks[i] = new Stack<>();
stacks[i].push(0);
}
for (int i = 0; i < n; i++) {
boolean chk = false;
for (int j = 0; j < 4; j++) {
if(stacks[j].peek() < arr[i]){ // 스택의 peek 보다 배열이 큰 수라면 스택에 저장
stacks[j].push(arr[i]);
chk = true;
break; // 스택에 쌓았다면 루프 탈출
}
}
if(!chk){ // 루프를 돌던 중 스택의 peek 보다 배열이 큰 수가 없다면
System.out.println("NO");
return;
}
}
System.out.println("YES");
}
}