[알고리즘 문제 풀이][파이썬] 백준 1158번: 요세푸스 문제

염지현·2022년 3월 17일
0

BOJ

목록 보기
6/22

백준 10866 문제 링크: https://www.acmicpc.net/problem/10866

📑 문제 설명

덱을 구현하여 명령을 처리하는 프로그램 작성.

입력: 명령어 수와 명령어
출력: 명령어에 따른 결과 출력

💡 문제 해결 방법

queue를 구현할 때와 비슷한 명령어를 많이 사용하였으며
덱의 경우 front와 back 모두 접근할 수 있기 때문에 append 대신 insert(index, 원소 값)을 사용하였다.

💻 코드

import sys
if __name__ == '__main__':
    n = int(sys.stdin.readline())
    queue = list()
    for i in range(n):
        code = sys.stdin.readline()
        if (code[:10] == 'push_front'):
            queue.insert(0, int(code[11:]))
        elif (code[:9] == 'push_back'):
            queue.insert(len(queue), int(code[10:]))
        elif (code[:9] == 'pop_front'):
            if (len(queue) > 0):
                print(queue.pop(0))
            else:
                print(-1)
        elif (code[:8] == 'pop_back'):
            if (len(queue) > 0):
                print(queue.pop(-1))
            else:
                print(-1)
        elif (code[:4] == 'size'):
            print(len(queue))
        elif (code[:5] == 'empty'):
            if (len(queue) > 0):
                print(0)
            else:
                print(1)
        elif (code[:5] == 'front'):
            if (len(queue) > 0):
                print(queue[0])
            else:
                print(-1)
        elif (code[:4] == 'back'):
            if (len(queue) > 0):
                print(queue[-1])
            else:
                print(-1)

💟 추가적으로 알게 된 점

  • insert 사용 시, index를 -1로 설정하면 자동으로 마지막에 원소가 추가될 것이라고 생각했지만 그냥 차례로 추가가 되어 내가 원하는 대로 삽입되지 않았다.
    • 따라서 마지막에 원소를 추가하고 싶을 때는 inser(len(list), 원소 값) 을 사용하여 마지막에 추가하는 방법을 사용하면 된다.

0개의 댓글