학습용 공간

알고리즘/백준 알고리즘(JAVA) 2020.07.14 댓글 개 starmk95

JAVA)1876번 스택을 사용한 수열만들기

 

import java.io.*;
import java.util.Stack;

public class Main {
    public static void main(String [] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        Stack<Integer> stack = new Stack<>();
        stack.push(0);
        int pointer = 0;
        int n = Integer.parseInt(br.readLine());
        int[] array = new int[n];
        for (int i=0;i<n;i++) {
            array[i] = Integer.parseInt(br.readLine());
        }

        for (int x : array) {
            if (stack.peek() < x) {
                for (int i=pointer;i<x;i++) {
                    stack.push(i+1);
                    sb.append("+\n");
                }
                stack.pop();
                sb.append("-\n");
                pointer = x;

            } else if (stack.peek() == x) {
                stack.pop();
                sb.append("-\n");

            } else {
                System.out.print("NO");
                return;
            }
        }
        System.out.print(sb);
    }
}

BufferedWriter를 사용했을 경우에 출력 초과 판정이 나서(이유는 잘 모르겠다..)

StringBuilder를 사용하여 출력 값을 문자열로 구성해서 System.out.print()로 출력했다.

 

먼저 테스트할 수열을 배열에 넣고, 각 배열(수열)의 원소들에 순서대로 접근하기 위해 for each문을 사용했다.

for each문은 for (int x : 배열 또는 문자열 이름) 형태로 사용되며

입력으로 배열이 들어온다면 배열의 첫 원소부터 끝 원소까지,

문자열이 들어온다면 첫 캐릭터부터 마지막 캐릭터까지 순서대로 변수 x를 통해 반환해준다.