문제
나의 생각
- 백준은 처음 풀어보는데 문제를 이해하기가 너무 어려운 듯 하다. 다른 사람들의 설명 그림을 몇 개 보고 알고리즘을 짜봤다.
- false 기준으로 설명 해보고자 한다.
- n = 5
- arr = 5, 4, 3, 2, 1
- 먼저 5라는 숫자를 입력하자고 하면 바로 입력이 된다.
- 그 다음 들어오는 4는 처음 스택에 들어간 값보다 작기 때문에 다음 스택에 들어간다.
- 그 다음 들어오는 3은 첫번째, 두번째 스택보다 작은 값이기에 다음 스택에 들어간다.
- 그 다음 들어오는 2는 앞에 3개의 스택의 값보다 작기 때문에 다음 스택에 들어간다.
- 마지막 1값은 4개의 스택의 peek 값보다 작기 때문에 다음 스택에 넣어야 하나 4개를 넘었으므로 false가 나온다.
나의 답안
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
scanner.nextLine();
int[] arr = Arrays.stream(scanner.nextLine().split(" "))
.mapToInt(Integer::parseInt)
.toArray();
if (check(a, arr)) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
public static boolean check(int a, int[] arr) {
ArrayList<Stack> arrayList = new ArrayList<>(Arrays.asList(
new Stack<>(),
new Stack<>(),
new Stack<>(),
new Stack<>()
));
for (int i = 0; i < a; i++) {
int point = 1;
for (int j = 0; j < arrayList.size(); j++) {
if (arrayList.get(j).isEmpty()) {
arrayList.get(j).push(arr[i]);
break;
}
int peek = (int) arrayList.get(j).peek();
if (peek > arr[i]) {
if (point >= arrayList.size()) {
return false;
}
point++;
} else {
arrayList.get(j).push(arr[i]);
break;
}
}
}
return true;
}
}
'BackJoon > Algorithm' 카테고리의 다른 글
(9012)괄호 (0) | 2023.03.21 |
---|---|
(24174) 알고리즘 수업 - 힙 정렬 2 (1) | 2023.03.19 |
(1158) 요세푸스 문제 (0) | 2023.03.17 |
(10818) 최소, 최대 (0) | 2023.03.15 |
(1021번) 회전하는 큐 (0) | 2023.03.14 |