백준 1874번: 스택 수열 [스택][Stack] -Java :: 매운코딩
728x90
300x250

https://www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 

BufferedWriter를 사용했더니 출력초과가 나왔다.

 

사유는 ..BufferedWriter는 버퍼가 일정량 이상 차면 정기적으로 flush가 된다고 한다.

임시저장 용도로 활용하기에는 무리가 있다. StirngBulider , StringBuffer를 사용할 것..!

package algorithm.boj;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;

public class Boj1874 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		System.setIn(new FileInputStream("Test.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		
		Stack<Integer> stack = new Stack<Integer>();
		int seq = 0;
//		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		
		//BufferedWriter는 버퍼가 일정량 이상 차면 정기적으로 flush가 되기에 임시저장 용도로 활용하기에는 무리가 있다.
		//StirngBulider , StringBuffer를 사용할 것..
		StringBuilder sb = new StringBuilder();
		
		for (int i = 0; i < N; i++) {
//			System.out.println(i);
			int num = Integer.parseInt(br.readLine());
			
			if(seq<num) {
				while(seq<num) {
					seq++;
					stack.push(seq);
					sb.append("+\n");
				}
				stack.pop();
				sb.append("-\n");
			} else {
				if(!stack.isEmpty() && stack.peek()==num) {
					stack.pop();
					sb.append("-\n");
				} else {
					System.out.println("NO");
					return;
				}
			}
			
		}
		
		System.out.print(sb);
		
		
	}

}
728x90

+ Recent posts