![[java] 백준 1874번 문제(스택 수열)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUI9dK%2FbtsMMGOJXpB%2FPKLqDOpaMLYLQqicpt637K%2Fimg.png)
[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 |