스택에 1부터 n까지의 수를 스택에 넣고(push) 빼는(pop) 과정을 통해 임의의 수열이 주어졌을 때 해당 수열을 만들 수 잇는지를 판단하는 문제이다.
이때 스택에 수를 넣을 때(push) 반드시 오름차순을 지켜야 한다.
이런 식의 과정을 거치게 된다.
그럼 어떻게 풀어야 할까?
예제1 에서의 처음 수열 입력 값은 '4'이다. (8은 입력 개수이므로 제외)
그럼 1부터 4까지의 정수를 스택에 push 한다.
그리고 숫자를 push 할 때는 반드시 오름차순이어야 하기 때문에 이전에 어디까지 입력 받았는지를 알기 위한 변수 start를 value 값으로 초기화 해주어야 한다. (4까지 push했기 때문에 다음에 push 할 경우 5부터 push 하기 위함이다)
그런 다음 스택의 맨 위 원소가 입력받은 4와 같다면 pop을 해주고, 만약 같지 않다면 주어진 수열을 만족하지 못 하는 것으로 "NO"가 된다.
전체적으로 입력받은 value 값 까지 push 한 이력이 없을 경우 stack에 value까지 push 한 후, 마지막 원소를 pop해주면 되는 문제이다.
참고로 결과적으로 출력해야 할 것은 + 또는 - 이므로, 끝날 경우 저장해둔 문자열을 한 번에 출력해주고, 그 외의 경우 이미 "NO"가 출력되어 프로그램이 종료된 상태이므로 출력될 일이 없다.
입력 방법을 Scanner 대신 BufferedReader 을 사용하여 풀이했다.
자바의 util 에 기본적으로 스택을 제공해주기 때문에 따로 구현하지 않고 이 클래스를 사용하면 된다.
출처: https://118k.tistory.com/265 [개발자로 살아남기:티스토리]