본문 바로가기

Java

[백준] 1874번 스택 수열 - Stack / push() / pop() / 스택의 원리

문제

 

로직

수열의 길이 입력 받기 N

수열을 담을 배열 선언 & 크기 설정

 

1. 반복문

- 배열에 수열 입력 받기

 

스택 선언

결과 판별할 부울 변수 선언 및 초기화

오름차순 자연수 변수 선언 및 초기화

StringBuffer 선언(출력할 값)

 

2. 반복문

- 수열의 값이 오름차순 자연수 값보다 크거나 같을 때

   같을 때까지 반복

     -> 스택에 push, + 값 저장

   클 때

     -> 스택 pop(), - 값 저장

- 수열의 값이 오름차순 자연수 값보다 작을 때

   스택 pop()

    pop한 값이 배열의 값보다 클 때

     -> 불가능 -> NO출력, 결과값 false, 프로그램 종료

    pop한 값이 배열의 값보다 작을 때

     -> - 값 저장

 

 

My Code
import java.util.Scanner;
import java.util.Stack;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] numArray = new int[N];

for (int b = 0; b < N; b++){
numArray[b] = sc.nextInt();
}
Stack<Integer> stack = new Stack<>();
boolean result = true;
int num = 1;
StringBuffer bf = new StringBuffer();

for (int i = 0; i < numArray.length; i++)
{
int su = numArray[i];
if (su >= num)
{
while (su >= num) {
stack.push(num++);
bf.append("+\n");
}
stack.pop();
bf.append("-\n");}
else {
int n = stack.pop();
if (n > su){ System.out.println("NO"); result = false; break;}
else bf.append("-\n");
}
}
if (result) System.out.println(bf.toString());
}
}

 

 

문제의 핵심 & 알게된 점

스택을 이용하는 문제이다보니 스택에 대한 기본 지식이 중요했다.

+, -값을 String문자열로 저장하려고 하니 append를 어떻게 할지 고민이었는데

StringBuffer을 이용해서 메서드를 부르니 편리하게 이용할 수 있었다.

 

 

참고 강의_인프런의 Do it! 알고리즘 코딩테스트 with JAVA