백준 알고리즘 기초 1/2, 200 - 자료구조1 스택수열

HyeonKi Jo·2022년 10월 31일
0
post-thumbnail

문제

출처

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)
profile
Talking Potato

0개의 댓글