728x90

문제

1 ~ n까지의 수가 순서대로 들어올 때

정해진 수열을 스택을 사용해서 만들 수 있다면 연산 방법을 출력하고

불가능하다면 "NO"를 출력하라

 

접근 방식

입력을 담을 스택과 수열을 저장할 리스트 혹은 배열을 선언한다.

 

43687521 라는 수열이 주어진 경우

4가 먼저 나와야하니 4를 넣자마자 빼줘야한다.

 

push(1);
push(2);
push(3);
push(4);

pop(); // 4
pop(); // 3

 

위와 같이 4까지 모두 넣어준 후에

4와 3을 빼주고 리스트에 넣어주면 43 수열이 완성된다.

 

다음으로 나와야 하는 수는 6이기 때문에 마저 스택에 수를 넣어주고

주어진 수열을 완성할 수 있는지 판단하면 된다.

 

즉, 스택에 값을 계속 넣어주면서 넣어준 값이

수열과 일치하는 경우 빼주면 된다.

 

풀이

public class Main {

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

		int n = Integer.parseInt(br.readLine());
		int index = 0;

		Stack<Integer> stack = new Stack<>();

		int[] sequence = new int[n];
		int[] result = new int[n];

		for (int i = 0; i < n; i++) {
			sequence[i] = Integer.parseInt(br.readLine());
		}

		for (int i = 1; i <= n; i++) {
			stack.push(i);
			sb.append("+\n");

			while (!stack.isEmpty() && stack.peek() == sequence[index]) {
				result[index++] = stack.pop();
				sb.append("-\n");
			}
		}

		if (result[n - 1] == 0) {
			System.out.println("NO");
		} else {
			System.out.println(sb);
		}
	}
}

 

'Java > Algorithms' 카테고리의 다른 글

[백준] 10845번 : 큐  (0) 2023.10.03
[백준] 2493번 : 탑  (0) 2023.10.03
[백준] 10773번 : 제로  (0) 2023.10.01
[백준] 10828번 : 스택  (0) 2023.10.01
[백준] 1158번 : 요세푸스 문제  (0) 2023.10.01

+ Recent posts