- Date : 2020.08.04(화)
- Time : 40분
- 파이썬에서의 스택은 list를 이용해서 풀이
- LIFO(Last-In-First-Out)
- push : append()
- pop : pop()
- 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
- 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
- 그렇지 않으면 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으로 선정된 문서가 어떤것인지 확인 가능