본문 바로가기
Sketch (Programming Language)/Python

Baekjoon Training #10828

by 생각하는 이상훈 2023. 7. 24.
728x90

#10828 스택

나의 오답 코드

#스택
import sys
input = sys.stdin.readline
n=int(input())

num_list=[]

for i in range(n):
    command = input()
    if command.startswith("push "):
        splitted_list = command.split()
        value = int(splitted_list[1])
        num_list.append(value)
    elif command == "pop":
        if len(num_list) == 0:
            print(-1)
        else:    
            a = num_list.pop()
            print(a)
    elif command == "size":
        print(len(num_list))
    elif command == "empty":
        if len(num_list) == 0:
            print(1)
        else:
            print(0)
    elif command == "top":
        if len(num_list) == 0:
            print(-1)
        else:
            print(num_list[-1])

단순히 stack에서 이용되는 함수들을 구현하면 되는 거기 때문에 그리 어렵지 않게 구현하고 채점을 하였으나 오답이 떴다.

아무리봐도 로직에서 문제가 없어보여서 gpt에게 물어봤더니 생각지도 못한 문제가 있었다. 입력이 엔터를 통해서 연속적으로 들어가기 때문에 input에 줄바꿈인 '\n'이 포함되어 문제가 발생한 것이었다. 따라서 아래와 같이 수정을 해야한다.

# 기존의 코드
for i in range(n):
    command = input()

# 바꿔야 하는 코드
for i in range(n):
    command = input().strip()

 

 

또다른 정답 코드

#스택
import sys
n = int(sys.stdin.readline())

stack=[]
for i in range(n):
    command = sys.stdin.readline().split()

    if command[0]=='push':
        stack.append(command[1])
    elif command[0]=='pop':
        if len(stack)==0:
            print(-1)
        else:
            print(stack.pop())
    elif command[0] == 'size':
        print(len(stack))
    elif command[0] == 'empty':
        if len(stack)==0:
            print(1)
        else:
            print(0)
    elif command[0] == 'top':
        if len(stack)==0:
            print(-1)
        else:
            print(stack[-1])

위와 같이 무조건 split을 하고 0번 index의 값을 command로 받아오고 1번 인덱스를 push의 경우 push할 integer로 이용하면 strip()을 해야하는 문제가 제거 되고 한번에 해결할 수 있다.


 

728x90

'Sketch (Programming Language) > Python' 카테고리의 다른 글

Baekjoon Training #1904  (0) 2023.08.18
Baekjoon Training #12865  (0) 2023.08.06
Baekjoon Training #5430  (0) 2023.05.04
Baekjoon Training #9660  (0) 2023.04.02
Baekjoon Training #2630  (0) 2023.03.30