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


'BOJ::문제풀이' 카테고리의 다른 글

1920 수 찾기  (0) 2018.01.01
1890 점프  (0) 2017.12.31
1759 암호 만들기  (0) 2017.12.31
1697 숨바꼭질  (0) 2017.12.31
1475 방 번호  (0) 2017.12.31

+ Recent posts