Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

행복한 개구리

백준 22.04.02. 1874번 - 스택 수열 본문

Algorithm/BaekJoon

백준 22.04.02. 1874번 - 스택 수열

HappyFrog 2022. 4. 2. 23:05

  • 우선 문제를 이해하기 조금 힘들었는데 제가 이해한 바가 맞다면 아래와 같습니다.
  • 1부터 n까지 증가하는 수열이 주어집니다.
  • 이 수열이 진행되는 과정에서 pop과 push를 실행하여 빈 리스트에 pop한 값을 저장하여 입력받은 수열을 만드는 것입니다.
    • 예제 1번입력값을 예로 든다면
    • 1~4까지는 주어진 만들어야할 수열의 0인덱스인 4와 일치하지 않으므로 push를 4번하고
    • 4번째 push를 한 이후엔 만들어야할 수열과 일치하는 값이 나왔으므로 pop
    • 그 다음 수인 3도 일치하므로 pop
    • 2는 일치하지않으므로 일치하는 수인 6이 나올때까지 push하는 방식입니다.
def push(r, l, k):
    r.append("+")
    l.append(k)


def pop(r, l):
    if len(l) < 1:
        return
    r.append("-")
    l.pop(-1)


n = int(input())
stack = []
result = []
count = 0
t = True

for i in range(n):
    num = int(input())

    while count < num:
        count += 1
        push(result, stack, count)

    if stack[-1] == num:
        pop(result, stack)
    else:
        t = False
        break

if t == False:
    print("NO")
else:
    for i in result:
        print(i)
  • 우선 스택의 기능을 수월하게 하기위해 push와 pop을 함수로 만들어 사용했습니다.
    • 다만 +인지 -인지 저장하기위해 result메서드를 사용하기 위해 매개변수 r을하나 더 할당해주었습니다.
  • 입력받은 값과 일치하지 않을 때, 증가하는 수열의 값을 저장할 stack과 +-결과를 저장할 result, 증가하는 수열의 값인 count, 예외로 스택을 만들 수 없을 때를 알아내기 위하여 가능/불가능 여부를 저장할 t를 생성하여 사용합니다. 
    • 입력받은 수와 수열의 수가 같아질 때까지 stack에 push해줍니다.
    • 이후에 스택의 마지막 수가 입력받은 수와 같다면 pop을 해줍니다.
    • 스택의 마지막 수가 입력받은 수와 같지 않다면 불가능한 수열이므로 t를 False로 바꿔줍니다.
  • t의 값에 따라 다르게 출력해주면 됩니다.