Algorithm/BaekJoon
[BOJ] 1874. 스택 수열
히욤이
2020. 2. 7. 00:17
BaekJoon 1874. 스택 수열
* 문제의 저작권은 BOJ 및 문제를 만든 사람에게 있습니다.
[문제 접근]
input 값을 받는 nn이라는 변수와 현재 값을 저장하는 num이라는 변수를 정해서
현재 값 이 input 값 보다 작으면 for문을 돌아 push를 해서 stack에 현재 값을 저장하고
input 값과 현재 값이 같아지면 pop해서 꺼내준다.
현재 값이 input 값 보다 클 경우에는 input값과 stack의 제일 top 값을 비교해서 같으면 꺼내준다.
같지 않은데 꺼낼 경우에는 어차피 수열을 만들 수 없기 때문에 break문으로 for문 탈출
그냥 push, pop 밖에 하는 거 없는 것 같은데 5번이나 틀렸다.
초반에는 식을 잘 못 짜기도 했고 마지막에는 메모리 초과
찾아보니 ans를 String으로 받아서 그런거여서 String 대신 ArrayList로 바꿔주니 바로 통과 !
[코드]
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;
public class Main_1874 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Stack<Integer> stack = new Stack<>();
int num = 0;
ArrayList<String> ans = new ArrayList<>();
for (int i = 0; i < n; i++) {
int nn = sc.nextInt();
if (num < nn) {
for (int j = num; j < nn; j++) {
num++;
stack.add(num);
ans.add("+");
}
} else if (num > nn) {
if (stack.peek() == nn) {
stack.pop();
ans.add("-");
} else {
break;
}
}
if (num == nn) {
stack.pop();
ans.add("-");
}
}
if (stack.isEmpty()) {
for (int i = 0; i < ans.size(); i++) {
System.out.println(ans.get(i));
}
} else {
System.out.print("NO");
}
}
}