출처
https://www.acmicpc.net/problem/1874
문제 설명
- 1부터 n까지, 오름차순으로 정렬된 수를 스택에 PUSH했다가 POP함으로써 하나의 수열을 만들 수 있다.
- 임의의 수열이 입력으로 주어졌을 때, 정렬된 수를 PUSH하고 POP함으로써 만들 수 있다면 어떤 순서로 PUSH하고 POP해야 하는지 출력한다.
- 만약 주어진 수열을 만들 수 없다면 'NO'를 출력한다.
문제 예시
- 오른쪽 예제 출력은 이해를 돕기위한 예시로, 실제 답안은
+
,-
,NO
만 출력되어야 한다. (출처 예제 참조)
def Stack_Arr(num): # 1부터 시작한다. i = 1 # push와 pop 연산을 할 리스트 arr = [] # 정답을 담을 리스트 answer = [] # 사용자의 입력을 받을 리스트 input_list = [int(input()) for _ in range(num)] # 입력된 원소 하나씩 가져옴 for temp in input_list: # 입력된 원소가 나올때까지 arr에 PUSH, answer리스트에 '+' 추가 while i <= temp: arr.append(i) answer.append('+') i += 1 # 만약 마지막으로 입력된 원소가 입력값과 같다면 POP연산, answer리스트에 '-'출력 if temp == arr[-1]: arr.pop() answer.append('-') # 만약 마지막으로 입력된 원소가 입력값과 다르다면 'NO' 반환 else: return ['NO'] # 결과 반환 return answer # n 입력 num = int(input()) # 함수 실행 answer = Stack_Arr(num) for ch in answer: print(ch)