[java] 백준 1874번 문제(스택 수열)자료구조 & 알고리즘/BOJ2025. 3. 18. 11:29
Table of Contents
원본 링크 : https://www.acmicpc.net/problem/1874
문제설명

소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Boj_1874 {
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<>();
int n = Integer.parseInt(br.readLine()); // n 입력 받음
int max = 0; // 수열의 최대값 저장
for (int i = 0; i < n; i++)
{
int input = Integer.parseInt(br.readLine());
// 입력받은 값이 최대값보다 크다면
while (max < input)
{
stack.push(++max); // 최대값까지 push
sb.append("+").append(System.lineSeparator());
}
// 입력받은 값이 스택의 top에 있는지 확인
if (stack.peek() == input)
{
stack.pop();
sb.append("-").append(System.lineSeparator());
}
else
{
System.out.println("NO");
return;
}
}
System.out.print(sb);
}
}
설명

이 부분이 중요하다.
입력에서 첫 번째줄을 제외하고 나머지 줄은 모두 스택의 TOP을 pop한 값이다.
즉, 현재 TOP이 4인데, 입력이 4를 제외한 다른 숫자라면 NO로 표현해야한다.

이 부분에 대해서 표로 나타내면 아래와 같다.
| 입력값 | 스택 상태 (연산 후) | + (push) 연산 | - (pop) 연산 |
|---|---|---|---|
| 4 | [1,2,3,4] → [1,2,3] | +, +, +, + | - |
| 3 | [1,2,3] → [1,2] | - | |
| 6 | [1,2,5,6] → [1,2,5] | +, + | - |
| 8 | [1,2,5,7,8] → [1,2,5,7] | +, + | - |
| 7 | [1,2,5,7] → [1,2,5] | - | |
| 5 | [1,2,5] → [1,2] | - | |
| 2 | [1,2] → [1] | - | |
| 1 | [1] → [] | - |

이 부분에 대해서 표를 나타내면 아래와 같다.
| 입력값 | 스택 상태 (연산 후) | + (push) 연산 | - (pop) 연산 |
|---|---|---|---|
| 1 | [1] → [] | + | - |
| 2 | [2] → [] | + | - |
| 5 | [3,4,5] → [3,4] | +, +, + | - |
| 3 | ❌ 오류 발생 (스택 TOP = 4, TOP이 3이 아님) |
현재 TOP이 4인데, 입력이 4를 제외한 다른 숫자이기 때문에 NO가 출력된다.
'자료구조 & 알고리즘 > BOJ' 카테고리의 다른 글
| [java] 백준 16967번 문제(배열 복원하기) (0) | 2025.03.20 |
|---|---|
| [java] 백준 17298번 문제(오큰수) (0) | 2025.03.19 |
| [Java] 백준 12891번 문제(DNA 비밀번호) (0) | 2025.03.17 |
| [Java] 백준 10986번 문제(나머지 합) (0) | 2024.07.06 |
| [Java] 백준 11660번 문제(구간 합 구하기 5) (0) | 2024.07.04 |