공부하는 히욤이

[BOJ] 1874. 스택 수열 본문

Algorithm/BaekJoon

[BOJ] 1874. 스택 수열

히욤이 2020. 2. 7. 00:17

BaekJoon 1874. 스택 수열

* 문제의 저작권은 BOJ 및 문제를 만든 사람에게 있습니다.

 

 

 

 

 

[문제 접근]

input 값을 받는 nn이라는 변수와 현재 값을 저장하는 num이라는 변수를 정해서

현재 값 이 input 값 보다 작으면 for문을 돌아 push를 해서 stack에 현재 값을 저장하고

input 값과 현재 값이 같아지면 pop해서 꺼내준다.

현재 값이 input 값 보다 클 경우에는 input값과 stack의 제일 top 값을 비교해서 같으면 꺼내준다.

같지 않은데 꺼낼 경우에는 어차피 수열을 만들 수 없기 때문에 break문으로 for문 탈출

 

그냥 push, pop 밖에 하는 거 없는 것 같은데 5번이나 틀렸다.

초반에는 식을 잘 못 짜기도 했고 마지막에는 메모리 초과

찾아보니 ans를 String으로 받아서 그런거여서 String 대신 ArrayList로 바꿔주니 바로 통과 !

 

 

 

 

 

 

 

 

 

 

[코드]

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;

public class Main_1874 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		Stack<Integer> stack = new Stack<>();

		int num = 0;
		ArrayList<String> ans = new ArrayList<>();
		
		for (int i = 0; i < n; i++) {
			int nn = sc.nextInt();
			if (num < nn) {
				for (int j = num; j < nn; j++) {
					num++;
					stack.add(num);
					ans.add("+");
				}
			} else if (num > nn) {
				if (stack.peek() == nn) {
					stack.pop();
					ans.add("-");
				} else {
					break;
				}
			}
			
			if (num == nn) {
				stack.pop();
				ans.add("-");
			}
		}
		if (stack.isEmpty()) {
			for (int i = 0; i < ans.size(); i++) {
				System.out.println(ans.get(i));
			}
		} else {
			System.out.print("NO");
		}
	}
}

'Algorithm > BaekJoon' 카테고리의 다른 글

[BOJ] 10845. 큐  (0) 2020.02.07
[BOJ] 1406. 에디터  (0) 2020.02.07
[BOJ] 9093. 단어 뒤집기  (0) 2020.02.06
[BOJ] 2455. 지능형 기차  (0) 2019.12.15
[BOJ] 2606. 바이러스  (0) 2019.08.22