Dandy Now!
  • [알고리즘][파이썬] 백준_10845_큐
    2022년 01월 03일 17시 25분 53초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    "10845번: 큐" 파이썬 풀이

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

     

    10845번: 큐

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

    www.acmicpc.net

     

    명령어를 구현하고 N개의 명령어 입력으로 큐를 조작해야 한다.

    주의할 점은 출력은 명령어를 입력할 때마다 한 줄씩 출력되어야 한다.

    예제 출력 1과 같은 형태로 단번에 모든 값이 출력되면 안된다.

    이 부분을 오해해 "틀렸습니다"를 경험했다.

     


    출력 값 누적 후 한번에 출력(틀렸습니다ㅠ)

    # 출력 값 누적 후 한번에 출력(결과: 틀렸습니다)
    import sys
    
    N = int(sys.stdin.readline())
    
    ipt = []
    for _ in range(N):
        ipt.append(sys.stdin.readline().strip())
    
    q = []
    for i in ipt:
        if i.count(' ') == 1:
            q.append(i[-1])
        elif i == 'pop':
            if q:
                print(q.pop(0))
            else:
                print('-1')
        elif i == 'size':
            if q:
                print(len(q))
            else:
                print(0)
        elif i == 'empty':
            if q:
                print(0)
            else:
                print(1)
        elif i == 'front':
            if q:
                print(q[0])
            else:
                print(-1)
        elif i == 'back':
            if q:
                print(q[-1])
            else:
                print(-1)

     

    명령어 입력에 대한 출력 값을 명령어를 조작하는 for 문이 끝나면 출력되도록 하였다.

    이러한 출력 형태는 문제에서 요구하는 것이 아니었다.

    # 입력과 출력 결과
    15
    push 1
    push 2
    front
    back
    size
    empty
    pop
    pop
    pop
    size
    empty
    pop
    push 3
    empty
    front # 이상 입력 값, 아래는 출력 값
    1
    2
    2
    0
    1
    2
    -1
    0
    1
    -1
    0
    3

     


    명령어 입력할 때마다 한 줄씩 출력(맞았습니다!)

    # 하나의 명령어가 주어질 때마다 한 줄씩 출력(결과: 맞았습니다!)
    import sys
    
    N = int(sys.stdin.readline())
    
    q = []
    for _ in range(N):
        cmd = sys.stdin.readline().split() # 빈칸으로 명령어와 값이 구분되는 경우에는 split을 이용해 리스트를 만드는 것이 효과적이었다.
        if cmd[0] == 'push':
            q.append(cmd[-1])
        elif cmd[0] == 'pop':
            if q:
                print(q.pop(0)) # pop은 특정 주소의 값을 pop할 수 있다.
            else:
                print('-1')
        elif cmd[0] == 'size':
            if q:
                print(len(q))
            else:
                print(0)
        elif cmd[0] == 'empty':
            if q:
                print(0)
            else:
                print(1)
        elif cmd[0] == 'front':
            if q:
                print(q[0])
            else:
                print(-1)
        elif cmd[0] == 'back':
            if q:
                print(q[-1])
            else:
                print(-1)

     

    문제에서 원하는 것은 다음과 같은 입력과 출력이었다.

    # 입력과 출력 결과
    15 # 입력
    push 1 # 입력
    push 2 # 입력
    front # 입력
    1 # 출력
    back # 입력
    2 # 출력
    size # 입력
    2 # 출력
    empty # 입력
    0 # 출력
    pop # 입력
    1 # 출력
    pop # 입력
    2 # 출력
    pop # 입력
    -1 # 출력
    size # 입력
    0 # 출력
    empty # 입력
    1 # 출력
    pop # 입력
    -1 # 출력
    push 3
    empty # 입력
    0 # 출력
    front # 입력
    3 # 출력

     

    "push 1"과 같이 명령어(push)와 값(1)이 함께 입력되는 경우,

    split()을 이용해 리스트로 만들어 주소 0, 1(명령어, 값)을 이용하는 방법이 간편했다.

    pop()는 pop(0)과 같이 특정 주소의 값을 pop할 수 있어 이 문제를 풀때 편리했다.

    728x90
    반응형
    댓글