BOJ::1874 스택 수열
https://www.acmicpc.net/problem/1874
자바에서는 결과값을 String 형으로 계속 + 해서 하려니 시간초과가 나왔다.
그래서 ArrayList에 저장해서 마지막에 출력하니 통과했다.
C++에서는 string 형으로 결과값 + 해줘도 아주아주 잘 통과한다. 시간도 훨씬 빠르다.
<JAVA>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Stack; public class Main { public static void main(String args[]) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n =Integer.parseInt(br.readLine()); ArrayList<String> res = new ArrayList(); int a[] = new int[n+1]; Stack<Integer> stack = new Stack(); for(int i =1 ; i<=n ;i++){ a[i]=Integer.parseInt(br.readLine()); } int j=1; for(int i = 1 ; i <= n; i++){ stack.push(i); res.add("+"); while(!stack.isEmpty() && stack.peek() == a[j]){ stack.pop(); res.add("-"); j++; } } if(stack.isEmpty()){ for(String s:res){ System.out.println(s); } }else{ System.out.println("NO"); } } } | cs |
<C++>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <iostream> #include <string> #include <stack> using namespace std; int n; stack<int> s; string res; int a[100001]; int main() { cin >> n; res = ""; for (int i = 1; i <= n; i++) { cin >> a[i]; } int j = 1; for (int i = 1; i <= n; i++) { s.push(i); res += "+\n"; while (true) { if (s.empty()) { break; } if (s.top() == a[j]) { s.pop(); j++; res += "-\n"; } else { break; } } } if (s.empty()) { cout << res; } else { cout << "NO" << endl; } } | cs |