[Python] 프로그래머스 / 스택/큐 / 프로세스 / any()

2024. 3. 6. 16:52Coding Test/Python

 

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

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

programmers.co.kr

 

 

 

 

def solution(priorities, location):
    answer = 0
    queue = [(i, j) for i, j in enumerate(priorities)]
    
    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

 

코드를 보고서도 나에겐 너무 이해하기 어려웠다

 

queue = [(i, j) for i, j in enumerate(priorities)]


이것을 통해 queue에 index와 값을함께 저장한 뒤

 

cur = queue.pop(0)

  

queue의 0번째 값을 return

if any(cur[1]<q[1] for q in queue):
            queue.append(cur)

 

cur[1]과 q[1]을 비교한다.

예를 들면, cur = (0,2) 일 때 cur[1] = 2이므로 q[1]들 중에서(2,1,3,2) 어느 하나라도 크면 queue에 cur을 추가한다.

그 이유는 cur[1]보다 먼저 처리해야할 우선순위가 있기 때문에 맨뒤로(append) 보내는 것이다!

 

else:
            answer+=1

 

만약다를 경우, anwer+=1

 

if cur[0]==location:
                return answer

 

그런데 cur[0]이 location과 같다면, 즉, index가 location이 같다면 answer을 출력.

작을 경우, answer 값이 누적되어 그것이 우선순위의 index가 되기 때문이다.(....?)

 

ref : 


https://velog.io/@jaemoon99/Level-2%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4

 

[Level 2]프로그래머스 - 프로세스(Feat. any)

프로그래머스에 있는 코딩테스트 문제 중 level 2 프로세스 문제를 풀어봤습니다.(실패함..)

velog.io