Skip to content

Latest commit

 

History

History
55 lines (43 loc) · 2.16 KB

File metadata and controls

55 lines (43 loc) · 2.16 KB

🐶 프로그래머스 프린터 풀이

  • Date : 2020.08.04(화)
  • Time : 40분
  • 파이썬에서의 스택은 list를 이용해서 풀이
  • LIFO(Last-In-First-Out)
  • push : append()
  • pop : pop()

기본 조건 사항 풀이

  1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
  2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
  3. 그렇지 않으면 J를 인쇄합니다.
while(priorities_copy) :
# 인쇄 대기목록에 문서가 남아있다면 조건을 실행합니다.

        maxs = max(priorities_copy)[0]
        # 비교를 위해 중요도가 가장 높은 문서의 중요도를 저장합니다.

        if priorities_copy[0][0] < maxs :
        # 가장 앞에 있는 문서가 대기 목록에서 가장 높은 중요도를 갖고 있지 않을 때 실행됩니다.
            priorities_copy.append(priorities_copy[0])
            # 대기목록의 가장 마지막에 넣습니다.
            priorities_copy.pop(0)
            # 대기 목록의 맨 앞에서 제거해줍니다.
        else :
        # 가장 앞에 있는 문서가 대기 목록에서 가장 높은 중요도를 갖고있을 때 실행합니다.
            location_stack.append(priorities_copy[0])
            # 인쇄 목록에 추가합니다.
            priorities_copy.pop(0)
            # 대기 목록에서 삭제합니다.

예외 처리

location으로 선정된 문서의 중요도가 다른 문서의 중요도와 겹칠 때 문제 발생

-> 중요도가 같아도 location으로 선정된 문서가 어떤것인지 확인할 수 있는 코드가 필요

priorities_copy = [[True] * 2 for i in range(len(priorities))]

for i in range(0,len(priorities),1):
    priorities_copy[i][0] = priorities[i]
# 2차원 배열로 생성 후 [][0]에는 대기 목록 배열을 복사
# [][1]에는 True로 설정해줌 

priorities_copy[location][1] = False
# 그리고 location인 문서의 [][1]은 False로 설정
# 마지막에 False를 추적해서 location으로 선정된 문서가 어떤것인지 확인 가능