알고리즘/Python

백준 알고리즘: 10845번 큐 (Python)

두넌 2023. 5. 23.

문제 정보


 

 

10845번: 큐

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

www.acmicpc.net

 

 

핵심


기존에 풀던 풀이가 있었는데, 해당 방식을 사용했더니 런타임 에러(ValueError)가 떠서 몇번이고 수정하다가

그냥 한 문장씩 받는 방식으로 바꾸어서 풀이하였다.

이전 풀이(스택) 에서 사용하지 않았던 3항 연산자도 사용하여 코드의 가독성 및 간결성을 높힐 수 있었다

 

풀이


 

import sys

N = int(sys.stdin.readline())

def sol():
    queue = []
    
    for i in range(N):
        com = sys.stdin.readline().split()
        
        if com[0] == 'pop':
            print(queue.pop(0) if queue else -1)
        elif com[0] == 'size':
            print(len(queue))
        elif com[0] == 'empty':
            print(0 if queue else 1)
        elif com[0] == 'front':
            print(queue[0] if queue else -1)
        elif com[0] == 'back':
            print(queue[-1] if queue else -1)
        elif com[0] == 'push':
            queue.append(com[1])

sol()

N번의 반복으로 readline 을 실행하여 각 문장을 받고,
각 문장을 split 하여 모두 동일한 방식으로 각 명령어들을 비교할 수 있었다

push 의 경우 split하면 2개의 배열로 분리되므로 배열의 1번지에서 우리가 추가하고자 하는 값을 찾아낼 수 있다

 

고찰


해멨던 풀이

import sys

_ = sys.stdin.readline()

def sol():
    queue = []
    command = sys.stdin.read().split('\n')
    
    for com in command:
        if com == 'pop':
            print(queue.pop(0) if queue else -1)
        elif com == 'size':
            print(len(queue))
        elif com == 'empty':
            print(0 if queue else 1)
        elif com == 'front':
            print(queue[0] if queue else -1)
        elif com == 'back':
            print(queue[-1] if queue else -1)
        else:
            _, x = com.split()
            queue.append(x)

sol()

기존 풀이는 이거였는데, 스택에서 했던 방식과 동일하게 N을 무시하고, 나머지 값들을 read() 로 받아서 처리하는 방식으로 풀이하였는데 자꾸 오류가 발생해서 이 방식을 사용하지 못했다

찾아봐도 해결이 나오지 않아 그냥 반복하여 문장을 받는 방식으로 풀이하였다
혹시나 해결 방법을 아시는분이 있다면 알려주시면 감사하겠습니다

댓글