https://www.acmicpc.net/problem/1874
시도 방법
- 해당 입력 받은 수열을 차례대로 가져와서 stack.peak() < n 이면 peak()가 n이 될 때까지 push를
- stack.peak() = n 이 되면 pop을 하고 다음 수열을 받아옴.
- try-catch를 사용하여 StackEmptyException이 나오면 "NO"를 출력하도록 구현
- 예외가 일어나지 않은 경우에는 stack이 비어있지 않거나 results의 길이가 N * 2가 아닌 경우 "NO"를 출력, 그렇지 않으면 결과를 출력하도록 함.
이러한 방법은 메모리 초과를 초래했음.
(try-catch문이 메모리를 많이 차지 하는지는 따로 공부를 해봐야 할듯)
접근 방법
- 첫 시도한 방법과 원리는 동일하지만, try-catch문을 사용하지 않도록 함.
최종 코드
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int[] numbers = new int[N];
for (int i = 0; i < N; i++) {
numbers[i] = scanner.nextInt();
}
Stack<Integer> stack = new Stack<>();
List<Character> results = new ArrayList<>();
int count = 1;
boolean isAble = true;
for (int i = 0; i < N; i++) {
int n = numbers[i];
if (isAble) {
while (count <= n) {
stack.add(count++);
results.add('+');
}
if (stack.empty()) {
isAble = false;
} else {
while (!stack.empty() && stack.peek() >= n) {
stack.pop();
results.add('-');
}
}
}
}
if (isAble) {
for (int i = 0; i < results.size(); i++) {
System.out.println(results.get(i));
}
} else {
System.out.println("NO");
}
}
}
반응형
'Tech > Problem Solving' 카테고리의 다른 글
[백준 1182] 부분수열의 합 (Java) (0) | 2020.01.30 |
---|---|
[백준 5430] AC (Java) (0) | 2020.01.27 |
[백준 1966] 프린터 큐 (Java) (0) | 2020.01.22 |
[백준 10866] 덱 (Java) (0) | 2020.01.16 |
[백준 9012] 괄호 (Java) (0) | 2020.01.12 |