Algorithm

[프로그래머스] Level2 | 프로세스 - 파이썬(Python) | 스택/큐(Stack/Queue)

토오오끼 2024. 4. 16. 00:06
728x90
반응형

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

 

프로그래머스

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

programmers.co.kr


스택/큐 문제라서 priorities와 index를 묶어서 큐로 만들어 둬야 할 것 같았다. 이렇게 만든 큐를 pop, append 해서 순서를 변경해 주고자 했다.

그리고 만든 큐와 함께 우선순위를 비교 하기 위해 priorities를 우선순위가 높은 순서대로 정렬을 해 줬다.

 

풀이 순서

if절에서 대기 하고 있는 큐의 첫 원소가 찾으려고 하는 location이면서 내림차순으로 정렬한 우선순위와 같으면 answer 즉 출력되는 순서를 return 하도록한다.

하지만 우선순위가 아니라면 큐에서 pop 후 append 해서 다시 맨 뒤로 보낸다.

우선순위인데 location이랑 일치하지 않으면 없어도 된다고 판단해서 큐랑 priorities에서 지워버렸다.

 

-> 오답

def solution(priorities, location):
    answer = 0    
    queue = [(idx, p) for idx, p in enumerate(priorities)]

    priorities.sort(reverse=True)
    while True:
        if queue[0][0] == location and queue[0][1] == priorities[0]:
            return answer
        
        elif queue[0][1] != priorities[0]:
            cur = queue.pop(0)
            queue.append(cur)
        else:
            passing = queue.pop(0)
            del priorities[0]
            answer += 1
            
    return answer

근데 정답보다 자꾸 1만큼 작은 값이 나왔다. 코드를 다시 보니 if 절에서 asnwer에 1을 더 해줘야 출력 순서가 나오는게 아닌가... ; 이런 실수를..

 

-> 정답

def solution(priorities, location):
    answer = 0    
    queue = [(idx, p) for idx, p in enumerate(priorities)]

    priorities.sort(reverse=True)
    while True:
        if queue[0][0] == location and queue[0][1] == priorities[0]:
            return answer + 1
        
        elif queue[0][1] != priorities[0]:
            cur = queue.pop(0)
            queue.append(cur)
        else:
            passing = queue.pop(0)
            del priorities[0]
            answer += 1
            
    return answer

수정했을 때 모든 케이스를 통과했다!

 


https://github.com/YOOHYOJEONG/algorithm_practice/blob/master/programmers/Level02_practice/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4.py

 

algorithm_practice/programmers/Level02_practice/프로세스.py at master · YOOHYOJEONG/algorithm_practice

알고리즘 공부 및 코딩테스트 준비. Contribute to YOOHYOJEONG/algorithm_practice development by creating an account on GitHub.

github.com

 

728x90
반응형