1874번: 스택 수열
https://www.acmicpc.net/problem/1874
# 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Stack;
public class Main {
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());
int start = 0;
// N 번 반복
while(N -- > 0) {
int value = Integer.parseInt(br.readLine());
if(value > start) {
// start + 1부터 입력받은 value 까지 push를 한다.
for(int i = start + 1; i <= value; i++) {
stack.push(i);
sb.append('+').append('\n'); // + 를 저장한다.
}
start = value; // 다음 push 할 때의 오름차순을 유지하기 위한 변수 초기화
}
// top에 있는 원소가 입력받은 값과 같지 않은 경우
else if(stack.peek() != value) {
System.out.println("NO");
return; // 또는 System.exit(0); 으로 대체해도 됨.
}
stack.pop();
sb.append('-').append('\n');
}
System.out.println(sb);
}
}
- BufferedReader 와 StringBuilder 를 사용한 풀이 방법이다.
- 자료구조로는 Stack 을 사용하며, StringBuilder 에 문자열을 쌓다가 반복문이 정상적으로 끝나면 문자열을 한 번에 출력하고, 해당 수열을 만들 수 없는 경우 "NO" 를 출력하며 프로그램을 종료시킨다.
- start 변수는 오름차순으로 어느 숫자까지 push 했는지를 체크하기 위한 변수이다.
문제 이해와 코드는 아래 블로그를 참고했다.
[백준] 1874번 : 스택 수열 - JAVA [자바]
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]을 얻을 수 있
st-lab.tistory.com
'코딩테스트 > 자바 문제풀이' 카테고리의 다른 글
[자료구조2] 백준 14425 문자열 집합 (2) | 2024.07.21 |
---|---|
[자료구조2] 백준 1620 나는야 포켓몬 마스터 이다솜 (0) | 2024.07.20 |
[자료구조] 백준 1966 프린터 큐 (0) | 2024.07.18 |
[자료구조] 백준 1935 후위 표기식(2) (0) | 2024.07.17 |
[자료구조] 백준 2346 풍선 터뜨리기 (0) | 2024.07.16 |