[프로그래머스] 프린터

정상협·2021년 12월 7일
0

알고리즘 공부

목록 보기
5/7

문제

나중에 생각해보니 간단하게 구현만 하면되는 문제였다.
문제에 그대로 나와는걸 그대로 구현해보자

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

프린트 기록을 담을 목록도 만든다.
데이터와 인덱스를 동시에 기록하는 리스트로 바꾼다.

print_list=[]
idx_list = [(i,p) for i,p in enumerate(priorities)]
  1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
      while len(idx_list) > 0:
              curr=idx_list.pop(0)
              isBig=False
  1. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
        for w in idx_list:
            if w[1] > curr[1]:
                idx_list.append(curr)
                isBig=True
                break
        
  1. isBig으로 리스트를 다 돌 때 까지 False면 문서를 인쇄한다.
	if not isBig:
            print_list.append(curr)

이것을 다 합치면 다음과 같다.

    while len(idx_list) > 0:
        curr=idx_list.pop(0)
        isBig=False
        for w in idx_list:
            if w[1] > curr[1]:
                idx_list.append(curr)
                isBig=True
                break
        if not isBig:
            print_list.append(curr)
    

이제 인덱스를 찾아서 값을 리턴해주면 끝난다.
이렇게 쉬운데 파이썬 문법에서 헷갈렸다. pop을 할 때 pop(0)를 해야
맨 앞의 문서를 빼가는데 pop()을 해버리는 바람에 시간이 오래 걸렸다.
아직 파이썬 문법은 익숙하지 않으니 1~2레벨의 기본 문제들을 더 풀어봐야지

profile
프로그래밍 배우는 중이에요

0개의 댓글