항해99 선택트랙 알고리즘

Khusan·2023년 5월 25일
0

10828번 스택 - 10773번 제로 문제

안녕하세요! 이번 포스트에서는 파이썬을 사용하여 스택(Stack)을 구현하는 방법에 대해 알아보겠습니다. 스택은 후입선출(LIFO, Last-In-First-Out) 자료구조로, 데이터를 쌓고 제거하는 작업에 유용하게 사용됩니다.

10828 문제

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

먼저, 주어진 코드를 살펴보겠습니다. 주어진 코드는 다음과 같습니다:

import sys
n = int(input())
x = []

for _ in range(n):
    c = list(map(str, sys.stdin.readline().split()))
    if c[0] == 'push':
        x.append(c[1])
    elif c[0] == 'pop':
        if not x:
            print(-1)
        else:
            print(x.pop())
    elif c[0] == 'size':
        print(len(x))
    elif c[0] == 'empty':
        if not x:
            print(1)
        else:
            print(0)
    elif c[0] == 'top':
        if not x:
            print(-1)
        else:
            print(x[-1])

주어진 코드는 스택(Stack)을 구현하는 부분입니다.

  1. n = int(input()): 사용자로부터 스택을 수행할 명령어의 개수를 입력 받습니다.

  2. x = []: 스택을 저장할 리스트 x`를 생성합니다.

  3. for _ in range(n):: 입력 받은 명령어의 개수만큼 반복합니다.

  4. c = list(map(str, sys.stdin.readline().split())): 사용자로부터 입력을 받아 공백을 기준으로 분할한 후, 각각의 문자열을 리스트로 저장합니다. 입력 형식은 "명령어 값"으로 가정합니다.

  5. 명령어에 따라 해당하는 동작을 수행합니다:

    • push: 스택에 값을 추가합니다. x.append(c[1])을 통해 입력된 값을 x 리스트에 추가합니다.

    • pop: 스택의 맨 위에 있는 값을 제거하고 출력합니다. 스택이 비어있으면 -1을 출력합니다. x.pop()을 통해 스택의 마지막 요소를 제거하고 해당 값을 출력합니다.

    • size: 스택의 크기(요소 개수)를 출력합니다. len(x)를 통해 스택의 길이를 출력합니다.

    • empty: 스택이 비어있는지 여부를 출력합니다. 스택이 비어있으면 1을, 아니면 0을 출력합니다. not x를 통해 스택이 비어있는지 검사합니다.

    • top: 스택의 맨 위에 있는 값을 출력합니다. 스택이 비어있으면 -1을 출력합니다. x[-1]을 통해 스택의 마지막 요소를 출력합니다.


10773 문제

나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다.

재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다.

재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다.

재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자!

이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다. 정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.

주어진 코드를 살펴보면 다음과 같습니다:

n = int(input())
x = []
cnt = 0

for _ in range(n):
    cnt += 1
    k = int(input())
    x.append(k)
    
    if k == 0:
        x.pop(-1)
        x.pop(-1)
    
    if n == cnt:
        x = sum(x)

print(x)

이 코드는 입력된 숫자들을 스택에 저장하고, 특정 조건에 따라 처리하는 기능을 수행합니다. 코드의 동작은 다음과 같습니다:

  1. n = int(input()): 사용자로부터 스택을 수행할 숫자의 개수를 입력 받습니다.

  2. x = []: 스택을 저장할 리스트 x를 초기화합니다.

  3. cnt = 0: 현재까지 처리한 숫자의 개수를 나타내는 변수 cnt를 초기화합니다.

  4. for _ in range(n):: 입력 받은 숫자의 개수만큼 반복합니다.

  5. cnt += 1: 반복문이 한 번 실행될 때마다 cnt 값을 1씩 증가시킵니다.

  6. k = int(input()): 사용자로부터 숫자 k를 입력 받습니다.

  7. x.append(k): 입력된 숫자 kx 리스트에 추가합니다.

  8. if k == 0:: 입력된 숫자 k가 0인 경우 다음을 수행합니다.

    • x.pop(-1): x 리스트의 마지막 요소를 제거합니다.
    • x.pop(-1): 다시 한 번 마지막 요소를 제거합니다. 이렇게 함으로써 두 번째로 추가된 숫자와 첫 번째로 추가된 숫자를 제거합니다.
  9. if n == cnt:: 모든 숫자를 처리한 후에 마지막으로 실행되는 조건문입니다.

    • x = sum(x): x 리스트의 모든 요소를 합하여 결과를 x에 저장합니다.
  10. print(x): 최종 결과인 x를 출력합니다.

profile
부딪히면서 배워가는 코딩

0개의 댓글