sm 기술 블로그

155. 1874(스택 수열) - 자바 본문

문제/백준_자바

155. 1874(스택 수열) - 자바

sm_hope 2022. 7. 22. 16:02
import java.util.*;
import java.io.*;

class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		Stack<Integer> stack = new Stack<>();
		int N = sc.nextInt();
		int cnt = 0;

		for (int i = 0; i < N; i++) {
			int T = sc.nextInt();

			while (cnt < T) {
				cnt++;
				stack.add(cnt);
				sb.append("+").append("\n");
			}

			if (stack.get(stack.size() - 1) == T) {
				sb.append("-").append("\n");
				stack.pop();	
			}

			else {
				System.out.println("NO");
				stack.add(1);
				break;
			}
		}

		if (stack.size() == 0) {
			System.out.print(sb);
		}

	}
}

문제요약

스택을 이용하여 입력 값이 되도록 해라

설명

			while (cnt < T) {
				cnt++;
				stack.add(cnt);
				sb.append("+").append("\n");
			}

입력값이 cnt 보다 작다면 1을 증가시켜 스택에 저장하고 +를 출력하기 위해 result 에 저장한다.

 

			if (stack.get(stack.size() - 1) == T) {
				sb.append("-").append("\n");
				stack.pop();	
			}

			else {
				System.out.println("NO");
				stack.add(1);
				break;
			}

만약 맨 뒤 값이 (스택은 LIFO[Last In First Out] 형식임) 입력값과 같다면 pop을 진행한다.

같지 않다면 NO를 출력하고 stack에 1을 저장한뒤 종료한다.

 

예를들어 4가 들어온다면

while문을 통해 stack에 1,2,3,4가 저장된다. 

stack에 맨 뒤에 값이 4이므로 pop을 통해 출력하고 다음 입력값을 받는다.

 

		if (stack.size() == 0) {
			System.out.print(sb);
		}

만약 스택이 비어있다면 result를 출력한다. 

NO인경우 1을 저장하기 때문에 절때 스택이 비어서 나올 수 없다.

'문제 > 백준_자바' 카테고리의 다른 글

157. 18258(큐) - 자바  (0) 2022.07.25
156. 17298(오큰수) - 자바  (0) 2022.07.25
154. 4949(균형잡힌 세상) - 자바  (0) 2022.07.22
153. 9012(괄호) - 자바  (0) 2022.07.21
151. 10828(스택) - 자바  (0) 2022.07.20
Comments