망나니 AWOS의 일상
article thumbnail
Published 2021. 11. 24. 21:36
[python] 백준 10845번 큐 알고리즘/백준

문제 풀이

명령어 6가지 중 push 명령어는 해당 명령어만 실행하고 출력은 없다.

테스트 케이스 입력 부분을 보면 파라미터를 2개, 1개 받는 경우가 있기 때문에 함수를 써서 하나의 인자는 받고 다른 인자는 default로 두어 해당 명령어가 들어오면 명령어 역할에 맞게 실행시켜주면 될 것 같았다.

def 함수명(a, b=0):
	return

queue는 리스트 구조를 이용하였고, 명령어를 받기 위해 빠른 입출력의 sys.stdin.readline()을 이용하였다. 그냥 입출력을 쓰면 시간 초과가 나게 된다. 또한 입력 명령어 중에 push 같은 경우 공백을 포함한 두번째 인자 값을 받아서 정수형(int)으로 만들어 줘야 하므로 split함수로 입력받았다.

cmd = sys.stdin.readline().split()

cmd의 길이가 다를 경우

- 'push 1'을 입력받으면 cmd에는 ['push', '1']이 들어가 len(cmd)은 2가 나온다.

- 'empty'를 입력받으면 cmd에는 ['empty']가 들어가 len(cmd)은 1이 나온다.

를 생각하여 조건을 걸어 해당 함수에 넘겨줘야 할 인자들의 개수를 맞게 넘겨주면 된다.

if len(cmd) == 1:
    # m_cmd는 함수명
    print(m_cmd(cmd[0]))
else:
    if m_cmd(cmd[0], int(cmd[1])) is None:
        continue
    else:
        print(m_cmd(cmd[0], int(cmd[1])))

두 번째 if 문을 보게 되면 None값인지 아닌지를 체크를 하였는데 그 이유는 아래의 함수를 보면 알 수 있다.

push 명령어 같은 경우 앞에서도 말했다시피 출력 부분이 없기 때문에 queue에 값만 넣고 return을 하게 되면 None값이 반환된다. 그래서 출력할 때 None이 나오지 않도록 Continue로 넘겨주기로 하였다.

def m_cmd(a, b=0):
    if a == 'push':
        queue.append(b)
    elif a == 'front':
        if queue:
            return queue[0]
        else:
            return -1
    elif a == 'back':
        if queue:
            return queue[-1]
        else:
            return -1
    elif a == 'size':
        return len(queue)
    elif a == 'pop':
        if queue:
            return queue.pop(0)
        else:
            return -1
    elif a == 'empty':
        if queue:
            return 0
        else:
            return 1

나머지 부분들은 차근차근 보면 이해될 거라 본다.

 

완성된 코드!!👍😊

import sys


def m_cmd(a, b=0):
    if a == 'push':
        queue.append(b)
    elif a == 'front':
        if queue:
            return queue[0]
        else:
            return -1
    elif a == 'back':
        if queue:
            return queue[-1]
        else:
            return -1
    elif a == 'size':
        return len(queue)
    elif a == 'pop':
        if queue:
            return queue.pop(0)
        else:
            return -1
    elif a == 'empty':
        if queue:
            return 0
        else:
            return 1


N = int(input())
queue = []

for i in range(N):
    cmd = sys.stdin.readline().split()
    if len(cmd) == 1:
        print(m_cmd(cmd[0]))
    else:
        if m_cmd(cmd[0], int(cmd[1])) is None:
            continue
        else:
            print(m_cmd(cmd[0], int(cmd[1])))
profile

망나니 AWOS의 일상

@AWOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!