이번 문제는 이해하기 어려웠다...😥
우선 stack을 사용하여 수열대로 pop, 그렇게 할 수 없다면 "NO"를 출력하는 프로그램 작성이다.
예를 들어, 8개의 숫자로 구성된 수열을 확인하고 싶다면!
8 # 원하는 숫자의 개수
4 # 여기부터
3
6
8
7
5
2
1 # 마지막까지 수열
즉, 8개의 숫자를 사용하여 4,3,6,8,7,5,2,1 순서대로 POP을 할 수 있는가(있으면 +/-로 표시), 없는가(NO)를 판단하는 문제이다.
오름차순으로 PUSH를 해야하기 때문에
[1][2][3][4]
[+][+][+][+]
여기까지 push(+)를 하고 수열 맨 첫번째 4 를 마주쳤기 때문에 pop을 진행한다.
[1][2][3][+][+][+][+][-]
pop을 한 후 다시 수열을 확인하고 두번째 3 을 마주쳤기 때문에 pop을 진행한다.
[1][2]
[+][+][+][+][-][-]
위에 과정을 반복한다.
입력: 원하는 수열의 개수, 수열
출력: 오름차순을 유지하여 stack에 push, pop 이 가능하다면 +,- 조합 출력 / 오름차순을 유지할 수 없다면 "NO" 출력
종결 조건
순열 모든 원소 하나하나를 보기 전까지 반복
예외 처리
def check_sequence(n,num_list):
seq_list = list()
pp_list = list()
for i in range(n):
seq_list.append(i)
temp_stack = list()
cnt = 0
i = 1
while (cnt < n):
if (len(temp_stack) == 0):
temp_stack.append(i)
pp_list.append("+")
# print('+')
i = i + 1
else:
if (temp_stack[-1] != num_list[cnt]):
if (i>n):
pp_list.append("NO")
break
else:
temp_stack.append(i)
pp_list.append("+")
# print('+')
i = i + 1
else:
temp_stack.pop()
pp_list.append("-")
# print('-')
cnt = cnt + 1
return pp_list
if __name__ == '__main__':
n = int(input())
num_list = list()
for i in range (n):
num = int(input())
num_list.append(num)
check = check_sequence(n, num_list)
if(check[-1] == "NO"):
print("NO")
else:
for i in range(len(check)):
print(check[i])