문제
문제해결
import java.util.Scanner;
import java.util.Stack;
public class B1874 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder(); //출력할 결과물 저장 용도
Stack<Integer> stack = new Stack<>();
int n = sc.nextInt();
int start = 1;//시작은 1부터
for (int i = 0; i < n; i++) { //n번 반복
int value = sc.nextInt();
if (value>=start){
//입력받은 값이 스텍에 집어넣었던 값보다 클 경우
//start~value까지의 값을 스텍에 push
for (int j = start; j <= value; j++) {
stack.push(j);
sb.append("+\n");//push할떄마다 + 저장
}
start = value+1;//오름차순 순서대로 push하기 위해 값 저장
}
//stack의 top이 입력값과 같지 않으면 수열 만들 수 없음
else if(stack.peek()!=value){
System.out.println("NO");
return;
}
//top을 빼서 수열 만들기
stack.pop();
sb.append("-\n");
}
System.out.println(sb);
}
}
- 1부터 첫번째 입력받은 숫자까지 stack에 push 한다
- stack의 top 요소를 pop 한다
- 이전 입력 받은 숫자를 기억한다(start = value+1)
- 다음 입력받은 숫자가 start보다 크다면 또다시 입력받은 숫자까지 push한다
- 다음 입력받은 숫자가 start보다 작다면 pop을 한다
- 만약 pop을 할 숫자가 수열과 맞지 않는다면 수열을 만들 수 없다(NO)
- n번만큼 반복이 완성되면 성공
'[알고리즘] > 백준' 카테고리의 다른 글
백준 10845 자바 - 큐 (0) | 2021.06.16 |
---|---|
백준 1406 자바 - 에디터 (0) | 2021.06.15 |
백준 9012 자바 - 괄호 (0) | 2021.06.13 |
백준 10828 자바 - 스택 (0) | 2021.06.12 |
자바 - 구현 - 백준 9093 단어 뒤집기 (0) | 2021.06.12 |