hahn

단계별로 풀어보기(스택 - 스택 수열) 본문

코딩테스트 연습/백준(JAVA)

단계별로 풀어보기(스택 - 스택 수열)

hahn 2021. 9. 18. 13:34
728x90
반응형

1874번: 스택 수열 (acmicpc.net)

 

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

http://boj.kr/8c0acefffd284e889bbc1dbd0ab888ad

 

공유 소스 보기

 

www.acmicpc.net

더보기
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;
import java.util.Stack;

class Main{
    
    public static void main(String[] args) throws IOException {
        
        Scanner sc = new Scanner(System.in);
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		Stack<Integer> st = new Stack<Integer>();
		
		StringBuilder sb = new StringBuilder();
		
		int numberCount = sc.nextInt(),
			compare = sc.nextInt();
		
		for(int i = 1; i <= numberCount; i++) {
			
			st.add(i);
			sb.append("+" + "\n");
			
			while(!st.empty() && st.peek() == compare) {
				
				st.pop();
				sb.append("-" + "\n");
				if(st.empty() && i == numberCount) break;
				compare = sc.nextInt();
				
			}
			
		}
		
		
		
		if(!st.empty()) {
			
			bw.write("NO");
					
		}else {
			
			bw.write(sb.toString());
			
		}
			
		
		bw.close();
        
    }
    
}

 

if(st.empty() && i == numberCount)

 

여기 조건 처리 i == numberCount 이거 안 넣었다가

 

한 번씩 입력 더 받길래 뭐지... 하면서 고민했고,

 

출력 초과는 진짜 예상치도 못한 문제였다.

 

BufferedWriter는 버퍼가 가득 차면

 

비정기적으로 flush 해버린다고 한다..

 

대박...

728x90
반응형