[프로그래머스] 스택/큐 - 프린터 (Python)

구미·2021년 5월 7일
0

알고리즘

목록 보기
5/25
def solution(priorities, location):
    answer = 0
    
    # while을 적절히 사용할 수 있도록 하자
    # while, pop, max 를 같이 사용하니까 훨씬 깔끔한 느낌!
    
    while len(priorities) != 0:
        # 대기목록 가장 앞에 있는 문서가 중요도가 가장 높은 경우
        if priorities[0] == max(priorities):
            answer += 1 # answer 는 인쇄된 문서의 개수
            priorities.pop(0) # 먼저 인쇄 -> 대기목록에서 삭제!
            if location == 0: # 내가 요청한 문서가 대기목록의 첫 번째에 있던 문서였다면
                return answer # 첫 번째 인쇄된 문서가 내가 요청한 문서이므로 answer 반환

        # 대기목록 가장 앞에 있는 문서가 중요도가 가장 높은 문서가 아니라면
        else:
            priorities.append(priorities.pop(0)) # 해당 문서를 대기목록 가장 뒤로 옮김
            # pop 함수는 해당 요소를 반환(return)해준다는 점 기억하기!
            
            # 옮기는 문서가 내가 요청한 문서라면?
            if location == 0:
                location = len(priorities) - 1
                # 내가 요청한 문서의 위치는 priorities 의 가장 뒤
            else: # 대기목록 제일 뒤로 옮긴 문서가 내가 요청한 문서가 아니라면
                location -= 1 # 내가 요청한 문서의 위치는 한 칸 앞으로 옮겨짐
    
    # 내가 요청한 문서가 몇 번째로 출력되는지 알고 싶은 것이므로 인쇄될 때마다 카운트 해준 answer 변수를 반환!
    return answer

대충은 알겠는데 구현을 못해서 다른 사람들 코드를 보고 주석을 달며 이해하려고 해봤다 😯
반복문을 사용하면 무작정 for문을 쓰려는 경향이 있는 것 같은데 while을 적절히 사용하면 더 효율적으로 쓸 수 있다는 점을 주의해야겠다!

코드 제출하고 발견한 다른 사람들 풀이 중 신기했던(?) 것도 가져와봤다.

def solution(priorities, location):
    queue =  [(i,p) for i,p in enumerate(priorities)]
    answer = 0
    while True:
        cur = queue.pop(0)
        if any(cur[1] < q[1] for q in queue):
            queue.append(cur)
        else:
            answer += 1
            if cur[0] == location:
                return answer
  • enumerate, any 에 대해서 더 알아봐야겠다고 생각!
  • list comprehension 도 더 능숙하게 사용할 수 있으면 좋겠다 🥲

문제 출처
https://programmers.co.kr/learn/courses/30/lessons/42587

참고
http://blog.naver.com/PostView.nhn?blogId=h0609zxc&logNo=221482532447&parentCategoryNo=1&categoryNo=9&viewDate=&isShowPopularPosts=false&from=postView

profile
디지털 노마드를 꿈꾸며! 🦄 🌈

0개의 댓글