알고리즘 (JAVA)/프로그래머스 알고리즘

[코테준비 - python] 프린터 level2 - 개발자배찌

개발자 배찌 2023. 1. 5. 16:41
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42587?language=python3

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


딱 봐도 큐 문제다.
문법력이 부족한 나는 heap이나 queue를 활용하지 못하고 리스트 튜플로 정의해서 풀었다..
풀릴듯 말듯.. 꽤 시간을 잡아먹었던 녀석

내 성공한 문제풀이

def solution(priorities, location):
    answer = 0
    temp = [(i,p) for i,p in enumerate(priorities)]
    queue=[]
    
    for i in priorities :
        queue.append(i)
    queue.sort(reverse=True)
    
    while len(queue) != 0 :
        for i in range(0,len(priorities)) :
            if queue[0] == temp[i][1]:
                answer+=1
                queue.pop(0)
                if temp[i][0] == location :
                    return answer
            
    return answer
                



다른사람 문제풀이1

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): # cur[1]가 가장 큰수가 아닐 경우 
            queue.append(cur)
        else: # cur[1]가 가장 큰수일 경우 
            answer += 1
            if cur[0] == location:
                return answer


다른사람 문제풀이2 - deque 이용

def solution(priorities, location):
  answer = 0
  from collections import deque

  d = deque([(v,i) for i,v in enumerate(priorities)])

  while len(d):
      item = d.popleft()
      if d and max(d)[0] > item[0]:
          d.append(item)
      else:
          answer += 1
          if item[1] == location:
              break
  return answer