Python/online judge

백준[10828.스택] | Python

구름솜:D 2024. 3. 11. 22:43
728x90

✏️ 문제

https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

✏️ 풀이방법

1. 입력하는 값이 많기 때문에 input()이 아닌 sys.stdin.readline()을 통해 입력을 받는다.

2. if-elif문을 사용하여 FILO(First In Last Out)으로 작성한다.

 

 

📌 코드

import sys
n = int(sys.stdin.readline())
stack = []
for i in range(n):
    s = sys.stdin.readline().split()
    if s[0] == 'push':
        stack.append(s[1])
    elif s[0] == 'pop':
        if len(stack) > 0:
            print(stack.pop())
        else:
            print(-1)
    elif s[0] == 'size':
        print(len(stack))
    elif s[0] == 'empty':
        if len(stack) > 0:
            print(0)
        else:
            print(1)
    elif s[0] == 'top':
        if len(stack) > 0:
            print(stack[-1])
        else:
            print(-1)

 

 

📌 결과

#입력
14
push 1
push 2
top
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
top


#출력
2
2
0
2
1
-1
0
1
-1
0
3

 

 

🤔 시행착오.1

import sys
n = int(sys.stdin.readline())
stack = []
for i in range(n):
    s = sys.stdin.readline().split()
    if s[0] == 'push':
        stack.append(s[1])
    elif s[0] == 'pop':
        if len(stack) > 0:
            a = stack[-1]
            stack.remove(stack[-1])
            print(a)
        else:
            print(-1)
    elif s[0] == 'size':
        print(len(stack))
    elif s[0] == 'empty':
        if len(stack) > 0:
            print(0)
        else:
            print(1)
    elif s[0] == 'top':
        if len(stack) > 0:
            print(stack[-1])
        else:
            print(-1)

- 출력은 예시와 같으나 틀린 답

- remove는 첫 번째 원소부터 탐색하여 가장 먼저 등장하는 값을 제거하기 때문에 인덱스로 제거하는 것이 아니라 stack[-1]로 작성했지만 위치가 아닌 값이 제거되서 오답이 된다.

 

 

 

📝 메모

- pop 메소드는 인덱스로 값을 제거하고, remove는 값을 통해서 먼저 등장하는 값으로 제거한다.

- 입력 값이 많을 때는 input() 내장 함수가 아닌 sys모듈의 sys.stdin.readline()을 사용하면 시간초과가 되지 않는다.

 

📒 다시보기

 

[Python] 05. 파이썬 문자열/리스트 관련 메소드

문자열 관련 메소드 1) 대소치환(upper(),lower(),title()) 문자열.upper() : 문자열을 대문자로 치환 문자열.lower() : 문자열을 소문자로 치환 문자열.title() : 문자열 앞글자만 대문자로 치환 a1 = 'abc de12! cAA

somin0416.tistory.com