Java/Algorithm

[Java-Algorithm] 백준 1874 스택 수열 풀이

Jeong Jeon
반응형

문제 : 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

 

풀이 : 

처음에는 문제 이해가 되지 않았다... 무슨 말인지 ㅎㅎ;

쉽게 말해 Stack에 들어가는 입력정수들은 1씩 증가하고,

push와 pop을 통해 1씩 증가하는 값이 담겨있는 Stack을 활용하여 입력받은 값을 만들수 있느냐는 문제였다.

 

문제 이해만 한다면 쉽게 풀수 있을것 같다.

public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringBuffer sb = new StringBuffer();

		int n = Integer.parseInt(st.nextToken());

		int index =0;
		Stack<Integer> stack = new Stack<Integer>();

		while (n>0) {
			n--;

			st = new StringTokenizer(br.readLine());
			int num = Integer.parseInt(st.nextToken());//숫자 입력받기

			if(num>index) {
				for (int i = index+1; i <= num; i++) {
					stack.push(i);
					sb.append("+").append("\n");
				}
				index = num;
			}else if(stack.peek() != num) {
				System.out.println("NO");
				return;
			}

			stack.pop();
			sb.append("-").append("\n");
		}
		System.out.println(sb);
	}

 

StringBuffer와 BufferedReader를 사용하는게 편하게 느껴졌던 문제 ㅎ

반응형